﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class ПроцедурыКонтроляОстатков
	{
		////////////////////////////////////////////////////////////////////////////////
		// КОНТРОЛЬ ОСТАТКОВ ВЫПОЛНЯЕТСЯ ПРИВИЛЕГИРОВАННО
		////////////////////////////////////////////////////////////////////////////////
		// ОБЩИЕ ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ТОВАРОВ
		// Функция возвращает текст условия для виртуальной таблииы регистров остатков товаров
		// Вызывается из функции ПолучитьСтруктуруУсловийТаблицыОстатков
		//
		// Параметры:
		//	ИмяДокумента 			- строка, параметр функции ПолучитьСтруктуруУсловийТаблицыОстатков
		//	ИмяТаблицы              - строка, параметр функции ПолучитьСтруктуруУсловийТаблицыОстатков
		//	КлючУсловия				- строка, имя ключа структуры УсловияТаблицыОстатков (параметр функции ПолучитьСтруктуруУсловийТаблицыОстатков)
		// 	ПолеСклад				- строка, если склад указывается в шапке, то пишется через "Ссылка."
		//										или не указывается, тогда условие будет таким Склад = &Склад
		//	ЕстьХарактеристика			- булево, признак того, что ТЧ документа содержит реквизит ХарактеристикаНоменклатуры
		//	ПолеХарактеристика			- строка, имя ревизита содержащего характеристику номенклатуры
		//	ЕстьКачество				- булево,  признак того, что ТЧ документа содержит реквизит Качество
		//	ЕстьСоставНабора			- булево,  признак того, что документ имеет табличную часть СоставНабора
		//	ДопУсловияТабличнойЧасти	- строка, дополнительные условия табличной части документа
		//	РеквизитДокументРезерва		- строка, если не пустая, то добавляется условие по измерению ДокументРезерва
		//
		//	ИспользоватьХарактеристикиНоменклатуры	- булево
		//  ИспользоватьВременнуюТаблицу			- булево, если истина, то в отборе будет использоваться временная таблица
		//												которая должна быть получена через параметр ИмяТаблицы = ВременнаяТаблица
		//
		// Возвращаемое значение:
		// Условие содержит измерения:
		//	- Номенклатура,
		//	- Склад (необязательный)
		//	- ХарактеристикаНоменклатуры (необязательный)
		//	- Качество (необязательный)
		//	- ДокументРезерва (необязательный)
		//

		public object ПолучитьТекстУсловияТаблицыОстатков(/*КлючУсловия, ИмяДокумента, ИмяТаблицы, СтруктураПараметров*/)
		{
			if(true/*СтруктураПараметров.ЕстьСоставНабора И СтруктураПараметров.ЕстьКачество
		И КлючУсловия <> "Резерв" И КлючУсловия <> "БезКачества"*/)
			{
				/*ПОЛЕ_Набор_Качество = Символы.ПС + 
			",	ВЫБОР КОГДА ДокНаб.Качество = ЗНАЧЕНИЕ(Справочник.Качество.ПустаяСсылка)
			|		ТОГДА ДокТов.Качество
			|		ИНАЧЕ ДокНаб.Качество 
			|	КОНЕЦ КАК Качество";*/
			}
			//Результат = "";
			if(true/*СтруктураПараметров.ПолеСклад = ""
		И КлючУсловия <> "ВременнаяТаблица"*/)
			{
				/*//Склад в шапке
*/
				//Результат = Результат + "Склад = &Склад И ";
			}
			if(true/*НЕ СтруктураПараметров.ЕстьКачество 
		И КлючУсловия <> "БезКачества"
		И КлючУсловия <> "Резерв" 
		И КлючУсловия <> "ВременнаяТаблица"*/)
			{
				/*//Нет качества в табличной части. Значит остатки всегда с качеством "Новый"
*/
				//Результат = Результат + "Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) И ";
			}
			if(true/*СтруктураПараметров.РеквизитДокументРезерва <> ""
		И НЕ СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры
		И СтруктураПараметров.ЕстьХарактеристика 
		И КлючУсловия <> "ВременнаяТаблица"*/)
			{
				/*//Есть условие на измерение ДокументРезерва, но характеристики не используются
*/
				/*//Т.к. порядок ДокументРезерва после ХарактеристикаНоменклатуры, то
*/
				/*//надо добавить условие для эффективного использования индекса
*/
				//Результат = Результат + "ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) И ";
			}
			/*Результат = Результат + ?(КлючУсловия = "ВременнаяТаблица", "",
		"(Номенклатура" 
		+ ?(СтруктураПараметров.ПолеСклад = "", "", ", Склад")
		+ ?(СтруктураПараметров.ЕстьХарактеристика И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, ", ХарактеристикаНоменклатуры", "")
		+ ?(СтруктураПараметров.ЕстьКачество И КлючУсловия <> "БезКачества" И КлючУсловия <> "Резерв", ", Качество", "")
		+ ?(КлючУсловия = "Резерв" И СтруктураПараметров.РеквизитДокументРезерва <> "", ", ДокументРезерва", "")
	
		+ ") В (") + "
		|	ВЫБРАТЬ
		|		Док.Номенклатура КАК Номенклатура"
		+ ?(СтруктураПараметров.ПолеСклад = "", "", ", Док." + СтруктураПараметров.ПолеСклад + " КАК " + СтруктураПараметров.ПолеСклад)
		+ ?(СтруктураПараметров.ЕстьХарактеристика И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, ", Док." + СтруктураПараметров.ПолеХарактеристика + " КАК " + СтруктураПараметров.ПолеХарактеристика, "")
		+ ?(СтруктураПараметров.ЕстьКачество И КлючУсловия <> "БезКачества" И КлючУсловия <> "Резерв", ", Док.Качество КАК Качество", "")
		+ ?(КлючУсловия = "Резерв" И СтруктураПараметров.РеквизитДокументРезерва <> "", ", Док." + СтруктураПараметров.РеквизитДокументРезерва + " КАК " + СтруктураПараметров.РеквизитДокументРезерва, "")
		+ ?(КлючУсловия = "ВременнаяТаблица", Символы.ПС + "ПОМЕСТИТЬ ВременнаяТаблицаДокумента", "") + "
		|	ИЗ
		|		" + ?(СтруктураПараметров.ИспользоватьВременнуюТаблицу И КлючУсловия <> "ВременнаяТаблица", "ВременнаяТаблицаДокумента", "Документ." + ИмяТаблицы) + " КАК Док
		|	" + ?(НЕ СтруктураПараметров.ИспользоватьВременнуюТаблицу ИЛИ КлючУсловия = "ВременнаяТаблица", "ГДЕ
		|		Док.Ссылка = &ДокументСсылка
		|		И НЕ Док.Номенклатура.Комплект 
		|		" + СтруктураПараметров.ДопУсловияТабличнойЧасти, "")
	
		+ ?(СтруктураПараметров.ЕстьСоставНабора И (КлючУсловия = "ВременнаяТаблица" ИЛИ НЕ СтруктураПараметров.ИспользоватьВременнуюТаблицу),"
			|	ОБЪЕДИНИТЬ ВСЕ
			|
			|	ВЫБРАТЬ
			|		ДокНаб.Номенклатура
			|	" + ?(СтруктураПараметров.ПолеСклад <> "", 
				",	ВЫБОР
			|			КОГДА ДокНаб.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) ТОГДА ДокТов.Склад
			|			ИНАЧЕ ДокНаб.Склад
			|		КОНЕЦ", "")
			+ ?(СтруктураПараметров.ЕстьХарактеристика И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, ", ДокНаб.ХарактеристикаНоменклатуры", "")
			+ ПОЛЕ_Набор_Качество
			+ ?(КлючУсловия = "Резерв" И СтруктураПараметров.РеквизитДокументРезерва <> "", ", ДокТов." + СтруктураПараметров.РеквизитДокументРезерва, "")
			+ "
			|	ИЗ
			|		Документ." + ИмяДокумента + ".СоставНабора КАК ДокНаб
			|		ЛЕВОЕ СОЕДИНЕНИЕ Документ." + ИмяТаблицы + " КАК ДокТов
			|			ПО ДокТов.КлючСтроки = ДокНаб.КлючСтроки
			|			 И ДокТов.Ссылка     = &ДокументСсылка
			|	ГДЕ
			|		ДокНаб.Ссылка = &ДокументСсылка", "") + "
			|" + ?(КлючУсловия = "ВременнаяТаблица","",")");*/
			return null;
		}
		// ПолучитьТекстУсловияТаблицыОстатков()
		// Функция возвращает структуру возможных условий виртуальной таблицы остатков регистров
		//
		// Параметры:
		//		ИмяДокумента 			- строка
		//		ИмяТаблицы              - строка
		//		УсловияТаблицыОстатков	- структура, содержит ключи для которых требуется получить значения
		//      СтруктураПараметров		- структура, содержит следующие ключи:
		//									ПолеСклад (необязательный), если реквизит в шапке, то пишется через "Ссылка."
		//									ЕстьХарактеристика (необязательный), по умолчанию ЛОЖЬ
		//									ЕстьКачество (необязательный), по умолчанию ЛОЖЬ
		//									ЕстьСоставНабора (необязательный), по умолчанию ЛОЖЬ
		//									ИспользоватьХарактеристикиНоменклатуры (желательно передавать), по умолчанию значение константы
		//									ДопУсловияТабличнойЧасти (необязательный), по умолчанию пустая строка
		//									РеквизитДокументРезерва (необязательный), по умолчанию пустая строка
		//									ИспользоватьВременнуюТаблицу (необязательный)
		//
		//

		public object ПолучитьСтруктуруУсловийТаблицыОстатков(/*ИмяДокумента, ИмяТаблицы, УсловияТаблицыОстатков, СтруктураПараметров = Неопределено*/)
		{
			/*//Заполним все поля значениями по умолчанию
*/
			//СтруктураПараметровКопия = Новый Структура;
			//СтруктураПараметровКопия.Вставить("ЕстьХарактеристика", Ложь);
			//СтруктураПараметровКопия.Вставить("ЕстьКачество", Ложь);
			//СтруктураПараметровКопия.Вставить("ЕстьСоставНабора", Ложь);
			//СтруктураПараметровКопия.Вставить("ДопУсловияТабличнойЧасти", "");
			//СтруктураПараметровКопия.Вставить("РеквизитДокументРезерва", "");
			//СтруктураПараметровКопия.Вставить("ПолеХарактеристика", "ХарактеристикаНоменклатуры");
			//СтруктураПараметровКопия.Вставить("ПолеСклад", "");
			//СтруктураПараметровКопия.Вставить("ИспользоватьХарактеристикиНоменклатуры", Неопределено);
			//СтруктураПараметровКопия.Вставить("ИспользоватьВременнуюТаблицу", Ложь);
			/*//Если передана структура, то заполним ее значениями
*/
			if(true/*СтруктураПараметров <> Неопределено*/)
			{
				//ЗаполнитьЗначенияСвойств(СтруктураПараметровКопия, СтруктураПараметров);
			}
			if(true/*СтруктураПараметровКопия.ИспользоватьХарактеристикиНоменклатуры = Неопределено*/)
			{
				//СтруктураПараметровКопия.ИспользоватьХарактеристикиНоменклатуры = глЗначениеПеременной("ИспользоватьХарактеристикиНоменклатуры");
			}
			/*// ЗАПОЛНИМ СТРУКТУРУ УсловияТаблицыОстатков
*/
			/*//Используются все переданные поля (склад,номенклатура,характеристика,качество)
*/
			if(true/*УсловияТаблицыОстатков.Свойство("Полное")*/)
			{
				//УсловияТаблицыОстатков.Полное= ПолучитьТекстУсловияТаблицыОстатков("Полное", ИмяДокумента, ИмяТаблицы, СтруктураПараметровКопия);
			}
			/*//Не используются поле Качество
*/
			if(true/*УсловияТаблицыОстатков.Свойство("БезКачества")*/)
			{
				//УсловияТаблицыОстатков.БезКачества = ПолучитьТекстУсловияТаблицыОстатков("БезКачества", ИмяДокумента, ИмяТаблицы, СтруктураПараметровКопия);
			}
			/*//Используется поле ДокументРезерва. Не используются поле Качество
*/
			if(true/*УсловияТаблицыОстатков.Свойство("Резерв")*/)
			{
				//УсловияТаблицыОстатков.Резерв = ПолучитьТекстУсловияТаблицыОстатков("Резерв", ИмяДокумента, ИмяТаблицы, СтруктураПараметровКопия);
			}
			/*//Формирует текст запроса для создания временной таблицы, которая используется в условиях виртуальной таблицы
*/
			if(true/*СтруктураПараметровКопия.ИспользоватьВременнуюТаблицу*/)
			{
				//УсловияТаблицыОстатков.Вставить("ВременнаяТаблица", ПолучитьТекстУсловияТаблицыОстатков("ВременнаяТаблица", ИмяДокумента, ИмяТаблицы, СтруктураПараметровКопия));
			}
			return null;
		}
		// ПолучитьСтруктуруУсловийТаблицыОстатков()
		// Вспомогательная процедура для дополнения текста запроса стандартными конструкциями
		//

		public void ДополнитьТекстЗапроса(/*ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,ТекстХарактеристика = "ХарактеристикаНоменклатуры",ЕстьСерия,ТекстСерия="СерияНоменклатуры",ЕстьКоэффициент,ЕстьКачество, ЕстьСкладВТабЧасти=ложь*/)
		{
			/*// ХарактеристикаНоменклатуры
*/
			//СОЕДИНЕНИЕ_Характеристика_Остатки     = "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)";
			//СОЕДИНЕНИЕ_Характеристика_ВремРезервы = "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)";
			if(true/*ЕстьХарактеристика*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Характеристика%", "Док."+ТекстХарактеристика);
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Характеристика", ",ТЧ."+ТекстХарактеристика);
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Характеристика", ","+ТекстХарактеристика);
				if(true/*СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры*/)
				{
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_ОстаткиБезСерии",			"И Док."+ТекстХарактеристика+" = ОстаткиБезСерии.ХарактеристикаНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_РезервыПоСерии",			"И Док."+ТекстХарактеристика+" = РезервыПоСерии.ХарактеристикаНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументуБезСерии","И Док."+ТекстХарактеристика+" = РезервыПоДокументуБезСерии."+ТекстХарактеристика);
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументу",		"И Док."+ТекстХарактеристика+" = РезервыПоДокументу."+ТекстХарактеристика);
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_Резервы",					"И Док."+ТекстХарактеристика+" = Резервы.ХарактеристикаНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_ТоварыКПередачеБезСерии",	"И Док."+ТекстХарактеристика+" = ТоварыКПередачеБезСерии.ХарактеристикаНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче",			"И Док."+ТекстХарактеристика+" = ТОварыКПередаче.ХарактеристикаНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_ТоварыКПолучению",			"И Док."+ТекстХарактеристика+" = ТоварыКПолучению.ХарактеристикаНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_КПередачеПоДокументуБезСерии",		"И Док."+ТекстХарактеристика+" = КПередачеПоДокументуБезСерии.ХарактеристикаНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_КПередачеПоДокументу",		"И Док."+ТекстХарактеристика+" = КПередачеПоДокументу.ХарактеристикаНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_ВремРезервы",				"И ТЧ."+ТекстХарактеристика+" = ВремРезервы.ХарактеристикаНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_Остатки//", "");
					//СОЕДИНЕНИЕ_Характеристика_Остатки = "Док." + ТекстХарактеристика;
					//СОЕДИНЕНИЕ_Характеристика_ВремРезервы = "ТЧ." + ТекстХарактеристика;
				}
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Характеристика_Остатки%", СОЕДИНЕНИЕ_Характеристика_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Характеристика_ВремРезервы%", СОЕДИНЕНИЕ_Характеристика_ВремРезервы);
			if(true/*ЕстьКоэффициент*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Количество%",	 "СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3)))");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Количество_Зап%", "ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Количество%",		 "СУММА(ВЫРАЗИТЬ(Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3)))");
			}
			/*// Качество
*/
			if(true/*ЕстьКачество*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Качество%",									"Док.Качество");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Качество_ОстаткиБезСерии",				"И Док.Качество = ОстаткиБезСерии.Качество");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Качество_Остатки",						"И Док.Качество = Остатки.Качество");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Качество_ТоварыКПередачеБезСерии",		"И Док.Качество = ТоварыКПередачеБезСерии.Качество");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Качество_ТоварыКПередаче",				"И Док.Качество = ТоварыКПередаче.Качество");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Качество_КПередачеПоДокументуБезСерии",	"И Док.Качество = КПередачеПоДокументуБезСерии.Качество");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Качество_КПередачеПоДокументу",			"И Док.Качество = КПередачеПоДокументу.Качество");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Качество_ТоварыКПолучению",				"И Док.Качество = ТоварыКПолучению.Качество");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Качество_Резервы",						"И Док.Качество = &Новый");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Качество",										",Качество");
				//СОЕДИНЕНИЕ_Качество_Остатки     = "Док.Качество";
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Качество_Остатки%", СОЕДИНЕНИЕ_Качество_Остатки);
			/*// СерияНоменклатуры
*/
			//СОЕДИНЕНИЕ_Серия_Остатки     = "ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			//СОЕДИНЕНИЕ_Серия_ВремРезервы = "ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			if(true/*ЕстьСерия*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Серия%", "Док."+ТекстСерия);
				if(true/*СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
				{
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоСерии",		"И Док."+ТекстСерия+" = РезервыПоСерии.СерияНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_КПередачеПоДокументу",	"И Док."+ТекстСерия+" = КПередачеПоДокументу.СерияНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ТоварыКПередаче",		"И Док."+ТекстСерия+" = ТоварыКПередаче.СерияНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ТоварыКПолучению",		"И Док."+ТекстСерия+" = ТоварыКПолучению.СерияНоменклатуры");
					//СОЕДИНЕНИЕ_Серия_Остатки     = "Док." + ТекстСерия;
					if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
					{
						//СОЕДИНЕНИЕ_Серия_ВремРезервы = "ТЧ." + ТекстСерия;
					}
				}
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Серия_Остатки%", СОЕДИНЕНИЕ_Серия_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Серия_ВремРезервы%", СОЕДИНЕНИЕ_Серия_ВремРезервы);
			if(true/*ЕстьСкладВТабЧасти*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Склад%",	"Док.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Склад%", "Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//УСЛОВИЕ_Склад", "И Док.Склад.ВидСклада<>&НТТ И Док.Склад.ВидСклада <> &ВидСклада");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_ОстаткиБезСерии",				"И Док.Склад = ОстаткиБезСерии.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_ТоварыКПередачеБезСерии",		"И Док.Склад = ТоварыКПередачеБезСерии.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_ТоварыКПередаче",				"И Док.Склад = ТоварыКПередаче.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_КПередачеПоДокументуБезСерии",	"И Док.Склад = КПередачеПоДокументуБезСерии.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_КПередачеПоДокументу",			"И Док.Склад = КПередачеПоДокументу.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_Остатки",						"И Док.Склад = Остатки.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_РезервыПоДокументуБезСерии",	"И Док.Склад = РезервыПоДокументуБезСерии.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_РезервыПоДокументу",			"И Док.Склад = РезервыПоДокументу.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_РезервыПоСерии",				"И Док.Склад = РезервыПоСерии.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Склад_Резервы",						"И Док.Склад = Резервы.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Склад",									",ТЧ.Склад");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Склад",										",Склад");
				/*ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_Склад%",	"ВЫБОР КОГДА ДокНаб.Склад = &ПустойСклад ТОГДА ДокТов.Склад
																		|ИНАЧЕ ДокНаб.Склад КОНЕЦ");*/
				//СОЕДИНЕНИЕ_Склад_Остатки     = "Док.Склад";
				//СОЕДИНЕНИЕ_Склад_ВремРезервы = "ТЧ.Склад";
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Склад_Остатки%", СОЕДИНЕНИЕ_Склад_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Склад_ВремРезервы%", СОЕДИНЕНИЕ_Склад_ВремРезервы);
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ТоварыНаСкладах
		// Процедура контролирует остатки по переданному документу и его табличной части.
		// В случае недостатка товаров выставляется флаг отказа и выдается сообщение.
		//
		// Параметры:
		//  ИмяТабличнойЧасти			- строка, имя табличной части, которая проводится по регистру,
		//  СтруктураШапкиДокумента		- структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  ОтказПроведения				- флаг отказа в проведении,
		//  ЗаголовокСообщения			- строка, заголовок сообщения об ошибке проведения.
		//	РежимПроведения				- РежимПроведенияДокумента
		//

		public void ТоварыНаСкладахКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			if(true/*УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровНаСкладе()*/)
			{
			}
			if(true/*глЗначениеПеременной("ИспользоватьРегистрСвободныеОстатки")*/)
			{
				//СвободныеОстаткиКонтрольОстатков(ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения);
			}
			//ИспользоватьУказаниеСерийНоменклатурыПриРезервировании = Ложь;
			if(true/*НЕ СтруктураШапкиДокумента.Свойство("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании", ИспользоватьУказаниеСерийНоменклатурыПриРезервировании)*/)
			{
				//ИспользоватьУказаниеСерийНоменклатурыПриРезервировании = глЗначениеПеременной("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании");
			}
			//ИспользоватьХарактеристикиНоменклатуры = глЗначениеПеременной("ИспользоватьХарактеристикиНоменклатуры");
			//ИспользоватьСерииНоменклатуры = глЗначениеПеременной("ИспользоватьСерииНоменклатуры");
			//Отказ     = ОтказПроведения;
			//Заголовок = ЗаголовокСообщения;
			//МетаданныеДокумента = СтруктураШапкиДокумента.Ссылка.Метаданные();
			//ИмяДокумента        = МетаданныеДокумента.Имя;
			//ИмяТаблицы          = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			if(true/*ИмяТабличнойЧасти <> ""*/)
			{
				//МетаданныеТабЧасти = МетаданныеДокумента.ТабличныеЧасти[ИмяТабличнойЧасти];
			}
			//СтруктураПараметров = Новый Структура;
			//СтруктураПараметров.Вставить("МетаданныеДокумента",	МетаданныеДокумента);
			//СтруктураПараметров.Вставить("ИмяДокумента", 		ИмяДокумента);
			//СтруктураПараметров.Вставить("ИмяТабличнойЧасти", 	ИмяТабличнойЧасти);
			//СтруктураПараметров.Вставить("ИмяТаблицы", 			ИмяТаблицы);
			//СтруктураПараметров.Вставить("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании",	ИспользоватьУказаниеСерийНоменклатурыПриРезервировании);
			//СтруктураПараметров.Вставить("ИспользоватьХарактеристикиНоменклатуры",					ИспользоватьХарактеристикиНоменклатуры);
			//СтруктураПараметров.Вставить("ИспользоватьСерииНоменклатуры",							ИспользоватьСерииНоменклатуры);
			//СтруктураПараметров.Вставить("РегистрОстаткиТоваров", "ТоварыНаСкладах");
			if(true/*СтруктураПараметров.ИмяДокумента = "ПеремещениеТоваров"*/)
			{
				//ТоварыНаСкладахКонтрольОстатков_ПеремещениеТоваров(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
			}
			/*//вернем обратно признак отказа от проведения документа 
*/
			//ОтказПроведения = Отказ;
			//ЗаголовокСообщения = Заголовок;
		}
		// КонтрольОстатков()
		// Процедура контролирует остати для документа ПеремещениеТоваров
		//Особенность данного документа:
		//1) необходимость дополнительного контроля по регистру ТоварыКПолучениюНаСклады
		//2) разные критерии определения количества, списываемого из резерва, в зависимости от того указан ли в шапке внутренний заказ
		//

		public void ТоварыНаСкладахКонтрольОстатков_ПеремещениеТоваров(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьСерия           = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры")            <> Неопределено;
			//ЕстьХарактеристика  = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")	 <> Неопределено;
			//ЕстьКоэффициент     = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                  <> Неопределено;
			//ЕстьКачество        = МетаданныеТабЧасти.Реквизиты.Найти("Качество")                  	 <> Неопределено;
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*ПараметрыУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество",
			ЕстьХарактеристика,
			ЕстьКачество);*/
			//ПараметрыУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//ПараметрыУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			ПараметрыУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//ТоварыНаСкладахЗаполнитьОбщиеПараметрыЗапроса(Запрос,СтруктураШапкиДокумента);
			//Запрос.УстановитьПараметр("Склад",                 СтруктураШапкиДокумента.Склад);
			//Запрос.УстановитьПараметр("ПустойОрдер",           Документы.ПриходныйОрдерНаТовары.ПустаяСсылка());
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(МетаданныеТабЧасти.Реквизиты.ДокументРезерва.Тип);
			//Запрос.УстановитьПараметр("МассивПустыхЗаказов",		 МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                                       	КАК Номенклатура,
	|	Док.Номенклатура.Представление                         	КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 	КАК ЕдиницаХраненияОстатковПредставление,
	|   %ПОЛЕ_Док_Характеристика% 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 						КАК СерияНоменклатурыПредставление,
//	|	Док.ДокументРезерва                                    	КАК ДокументРезерва,
	|   &Склад                                                 	КАК Склад, 
	|   %ПОЛЕ_Док_Качество% 									КАК Качество,
	|   %ПОЛЕ_Док_Количество% 									КАК ДокументКоличество,
	|   %ПОЛЕ_ОстатокБезСерии_Количество% 						КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)         КАК ОстатокКоличество,
	|	ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)         КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерии_Количество%                    	КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0) КАК КПередачеКоличество,
	|	%ПОЛЕ_КПередачеБезСерии_Количество% 					КАК КПередачеБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПолучению.КоличествоОстаток),0)КАК КПолучению,
	|	Сумма(ВЫБОР КОГДА 
	|			Док.ДокументРезерва ССЫЛКА Документ.ПриходныйОрдерНаТовары 
	|		ТОГДА %ПОЛЕ_Док_Количество_Зап% 
	|		ИНАЧЕ 0 
	|		КОНЕЦ)												КАК КПолучениюПоДокументуКоличество,
	|	ЕстьNull(МАКСИМУМ(РезервыПоДокументу.КоличествоОстаток),0) КАК РезервыПоДокументуКоличество,
	|	%ПОЛЕ_РезервыПоДокументуБезСерии_Количество% 			КАК РезервыПоДокументуБезСерииКоличество,
	|	0 														КАК КПередачеПоДокументуКоличество,
	|	0              											КАК КПередачеПоДокументуБезСерииКоличество
	|
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|	
	//таблица остатков на складах с учетом серий номенклатуры
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления." + СтруктураПараметров.РегистрОстаткиТоваров + ".Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = &Склад
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	
	//таблица остатков на складах без учета серий номенклатуры
	|//ЗАПРОС_ОстаткиБезСерии

	//таблица товаров в резерве на складе без учета серий номенклатуры
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Резервы.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры
	|//ЗАПРОС_РезервыПоСерии

	//таблица резервов по документу: количество, которое списывается за счет резерва
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	(ВЫБРАТЬ
	|		ТЧ.Номенклатура
	|		//ПОЛЕ_ТЧ_Характеристика
	|		//ПОЛЕ_ТЧ_Серия
	|		
	|		//количество, списываемое за счет резерва, не может превышать остаток в резерве
	|		,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) 
	|			ТОГДА Сумма(ТЧ.ДокументКоличество)
	|			ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
	|		КОНЕЦ КАК КоличествоОстаток
	|	ИЗ
	|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
	|		(ВЫБРАТЬ  
	|			Номенклатура 
	|			//ПОЛЕ_Характеристика КАК ХарактеристикаНоменклатуры
	|			//ПОЛЕ_Серия КАК СерияНоменклатуры
	|			,%ПОЛЕ_Заказ%
	|			,%ПОЛЕ_Количество% КАК ДокументКоличество
	|		ИЗ 
	|			Документ." + СтруктураПараметров.ИмяТаблицы +"
	|		ГДЕ 
	|			Ссылка = &ДокументСсылка
	|			И ДокументРезерва НЕ В (&МассивПустыхЗаказов)
	|			//СОЕДИНЕНИЕ_РезервыПоДокументу_ДокументРезерва
	|		СГРУППИРОВАТЬ ПО
	|			Номенклатура 
	|			,%ПОЛЕ_Заказ%
	|			//ПОЛЕ_Характеристика
	|			//ПОЛЕ_Серия
	|		) КАК ТЧ
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
	|	ПО
	|		ВремРезервы.Склад = &Склад
	|		И ВремРезервы.Номенклатура = ТЧ.Номенклатура
	|		И ВремРезервы.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_ВремРезервы%
	|		И ВремРезервы.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_ВремРезервы%
	|		И ВремРезервы.ДокументРезерва = ТЧ.ДокументРезерва
	|
	|	СГРУППИРОВАТЬ ПО 
	|		ТЧ.Номенклатура 
	|		//ПОЛЕ_ТЧ_Характеристика
	|		//ПОЛЕ_ТЧ_Серия
	|) КАК РезервыПоДокументу
	|ПО 
	|	Док.Номенклатура = РезервыПоДокументу.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументу
	|	//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу
	|	//Док_УсловиеДокументРезерва
	
	|//таблица резервов по документу без учета серий: количество, которое списывается за счет резерва 
    |//ЗАПРОС_РезервыПоДокументуБезСерии

	
	|//товары к передаче со складов
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО 
	|	ТоварыКПередаче.Склад = &Склад
	|	И Док.Номенклатура = ТоварыКПередаче.Номенклатура
	| //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
	| //СОЕДИНЕНИЕ_Серия_ТоварыКПередаче
	| //СОЕДИНЕНИЕ_Качество_ТоварыКПередаче
	
	|//товары к передаче со складов без учета серий
	|//ЗАПРОС_ТоварыКПередачеБезСерии
	
	// Если мы перемещаем товар, то товар поступивший по ордеру не может быть перемещен без указания этого
	// ордера в качестве документа резрерва, поэтому остатки регистра "Товары к получению на склады" надо
	// вычесть из свободного остатка
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(, " + УсловияТаблицыОстатков.Полное + " 
	|		// Документ получения может быть только ордером, причем ордера без права продажи не учитываем,
	|       // поскольку они уже учтены в регистре резервов
	|		И ДокументПолучения ССЫЛКА Документ.ПриходныйОрдерНаТовары
	|       И НЕ ДокументПолучения.БезПраваПродажи
	|		) КАК ТоварыКПолучению
	|ПО 
	|	ТоварыКПолучению.Номенклатура = Док.Номенклатура
	|	И ТоварыКПолучению.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыКПолучению.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	| 	//СОЕДИНЕНИЕ_Серия_ТоварыКПолучению
	| 	И (Док.ДокументРезерва = &ПустойОрдер ИЛИ Не Док.ДокументРезерва ССЫЛКА Документ.ПриходныйОрдерНаТовары)
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%,
	|   %ПОЛЕ_Док_Качество%
//	|	 Док.ДокументРезерва 
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления." + СтруктураПараметров.РегистрОстаткиТоваров + ".Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|         МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(КПередачеБезСерииКоличество),
	|			МАКСИМУМ(РезервыПоДокументуБезСерииКоличество), МАКСИМУМ(КПередачеПоДокументуКоличество), 
	|		Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура
	|   //ПОЛЕ_Характеристика
	|	//ПОЛЕ_Качество
	|";*/
			//ТекстЗапросаОстаткиБезСерии = "";
			//ТекстЗапросаКПередачеБезСерии = "";
			//ТекстЗапросаРезервыПоСерии = "";
			//ТекстЗапросаРезервыПоДокументуБезСерии = "";
			if(true/*ЕстьСерия*/)
			{
				/*ТекстЗапросаОстаткиБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления." + СтруктураПараметров.РегистрОстаткиТоваров + ".Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
			|ПО 
			|	ОстаткиБезСерии.Номенклатура = Док.Номенклатура
			|	И ОстаткиБезСерии.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
			|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И ОстаткиБезСерии.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры";*/
				/*ТекстЗапросаКПередачеБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
			|ПО 
			|	ТоварыКПередачеБезСерии.Номенклатура = Док.Номенклатура
			|	И ТоварыКПередачеБезСерии.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
			|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыКПередачеБезСерии.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры";*/
				/*//резервирование может происходить в разрезе серий
*/
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_РезервыПоДокументу_ДокументРезерва", " И ЕСТЬNULL(ВЫРАЗИТЬ(ДокументРезерва КАК Документ.ЗаказПокупателя).ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей, ИСТИНА)");
					/*ТекстЗапросаРезервыПоСерии = "
				|ЛЕВОЕ СОЕДИНЕНИЕ
				|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
				|ПО 
				|	РезервыПоСерии.Номенклатура = Док.Номенклатура
				|	И РезервыПоСерии.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
				|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И РезервыПоСерии.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
				|	//СОЕДИНЕНИЕ_Качество_Резервы";*/
					/*ТекстЗапросаРезервыПоДокументуБезСерии = "
				|ЛЕВОЕ СОЕДИНЕНИЕ
				|	(ВЫБРАТЬ
				|		ТЧ.Номенклатура
				|		//ПОЛЕ_ТЧ_Характеристика
				|		//количество, списываемое за счет резерва, не может превышать количество указанное в документе
				|		,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА
				|   		Сумма(ТЧ.ДокументКоличество)
				|		ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
				|		КОНЕЦ КАК КоличествоОстаток
				|	ИЗ
				|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
				|		(ВЫБРАТЬ  
				|			Номенклатура 
				|			//ПОЛЕ_Характеристика
				|			,%ПОЛЕ_Заказ%
				|			,%ПОЛЕ_Количество% КАК ДокументКоличество
				|		ИЗ 
				|			Документ." + СтруктураПараметров.ИмяТаблицы +"
				|		ГДЕ  Ссылка = &ДокументСсылка
				|			И %УсловиеДокументРезерваБезСерии%
				|		СГРУППИРОВАТЬ ПО
				|			Номенклатура 
				|			,%ПОЛЕ_Заказ%
				|			//ПОЛЕ_Характеристика
				|		) КАК ТЧ
				|	ЛЕВОЕ СОЕДИНЕНИЕ 
				|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
				|	ПО 
				|		ВремРезервы.Склад = &Склад
				|		И ВремРезервы.Номенклатура = ТЧ.Номенклатура
				|		И ВремРезервы.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_ВремРезервы%
				|		И ВремРезервы.ДокументРезерва = ТЧ.ДокументРезерва
				|
				|	СГРУППИРОВАТЬ ПО 
				|		ТЧ.Номенклатура 
				|		//ПОЛЕ_ТЧ_Характеристика
				|) КАК РезервыПоДокументуБезСерии
				|ПО 
				|Док.Номенклатура                 = РезервыПоДокументуБезСерии.Номенклатура
				|//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументуБезСерии
				|//Док_УсловиеДокументРезерва
				|";*/
				}
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ОстаткиБезСерии",			ТекстЗапросаОстаткиБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ТоварыКПередачеБезСерии",	ТекстЗапросаКПередачеБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоСерии",				ТекстЗапросаРезервыПоСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии",	ТекстЗапросаРезервыПоДокументуБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ОстатокБезСерии_Количество%",				?(ТекстЗапросаОстаткиБезСерии<>"",				"ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеБезСерии_Количество%",				?(ТекстЗапросаКПередачеБезСерии<>"",			"ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерии_Количество%",				?(ТекстЗапросаРезервыПоСерии<>"",				"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%",	?(ТекстЗапросаРезервыПоДокументуБезСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)",	"0"));
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,,ЕстьСерия,,ЕстьКоэффициент,ЕстьКачество,ложь);
			//СОЕДИНЕНИЕ_Серия_ВремРезервы = "ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			if(true/*ЕстьСерия*/)
			{
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*//резервы по документу имеет смысл определять с точностью до серии - заказ указывается в таб части, т.е. может быть заказ покупателя
*/
					/*//(в шапке может быть указан внутренний заказ, в этом случае резервы по документу всегда без серий)
*/
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия",							",ТЧ.СерияНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия",								",СерияНоменклатуры");
					if(true/*СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
					{
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу",	"И Док.СерияНоменклатуры = РезервыПоДокументу.СерияНоменклатуры");
						//СОЕДИНЕНИЕ_Серия_ВремРезервы = "ТЧ.СерияНоменклатуры";
					}
				}
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Серия_ВремРезервы%", СОЕДИНЕНИЕ_Серия_ВремРезервы);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Заказ%",								"ДокументРезерва");
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%УсловиеДокументРезерваБезСерии%",			" ДокументРезерва НЕ В (&МассивПустыхЗаказов)");
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//Док_УсловиеДокументРезерва",				"И Док.ДокументРезерва НЕ В (&МассивПустыхЗаказов)");
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыНаСкладахОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ТекстЗапросаРезервыПоДокументуБезСерии<>"",СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		// Процедура контролирует остати для документов РеализацияТоваровИУслуг, ЧекККМ и ОтчетОРозничныхПродажах (таб части Товары и СоставНабора)
		//

		public void ТоварыНаСкладахКонтрольОстатков_Реализация_ОтчетОРознПродажах_ЧекККМ(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//Запрос = Новый Запрос;
			//ЕстьСоставНабора   = Истина;
			//ЕстьКачество       = МетаданныеТабЧасти.Реквизиты.Найти("Качество") <> Неопределено;
			//ЕстьСпособСписания = МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров")	<> Неопределено;
			//ЕстьСкладВТабЧасти = МетаданныеТабЧасти.Реквизиты.Найти("Склад") <> Неопределено;
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*ПараметрыУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество,ЕстьСоставНабора",
			Истина,
			ЕстьКачество,
			ЕстьСоставНабора);*/
			//ПараметрыУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//ПараметрыУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			//ПараметрыУсловий.Вставить("ИспользоватьВременнуюТаблицу", Истина);
			if(true/*ЕстьСкладВТабЧасти*/)
			{
				//ПараметрыУсловий.Вставить("ПолеСклад", "Склад");
			}
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			ПараметрыУсловий);*/
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			if(true/*ЕстьСоставНабора*/)
			{
				/*ТекстЗапросаРеквизитыДокумента = "
			|	(ВЫБРАТЬ
			//строки ТЧ Товары которые не являются набором
			|		Ссылка,
			|		Номенклатура,
			|		%ПОЛЕ_Склад%,
			|		%ПОЛЕ_СпособСписанияОстаткаТоваров% КАК СпособСписанияОстаткаТоваров,   
			|		%ПОЛЕ_Качество% КАК Качество,                       
			|		ХарактеристикаНоменклатуры,
			|		СерияНоменклатуры,
			|		Коэффициент,
			|		%ПОЛЕ_ЗаказПокупателя% КАК ЗаказПокупателя, 
			|		Количество
			|		ИЗ
			|			Документ." + СтруктураПараметров.ИмяТаблицы + " 
			|		ГДЕ
			|			Ссылка = &ДокументСсылка
			|			И НЕ Номенклатура.Комплект
			|
			//строки ТЧ СоставНабора 
			|		ОБЪЕДИНИТЬ ВСЕ
			|
			|		ВЫБРАТЬ
			|		Ссылка,
			|		Номенклатура,
			|		Склад,
			|		СпособСписанияОстаткаТоваров,
			|		Качество,
			|		ХарактеристикаНоменклатуры,
			|		СерияНоменклатуры,
			|		Коэффициент,
			|		ЗаказПокупателя,
			|		Количество
			|		ИЗ
			|			(ВЫБРАТЬ
			|				ДокНаб.Ссылка,
			|				ДокНаб.Номенклатура,
			|               %ПОЛЕ_Набор_Склад% КАК Склад,
			|				%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров% КАК СпособСписанияОстаткаТоваров,   
			|				%ПОЛЕ_Набор_Качество% КАК Качество,                       
			|				ДокНаб.ХарактеристикаНоменклатуры,
			|				ДокНаб.СерияНоменклатуры,
			|				ДокНаб.ЕдиницаИзмерения.Коэффициент КАК Коэффициент,
			|				%ПОЛЕ_Набор_ЗаказПокупателя% КАК ЗаказПокупателя,
			|				ДокНаб.Количество * ДокТов.Количество КАК Количество
			|			ИЗ
			|				Документ." + СтруктураПараметров.ИмяДокумента + ".СоставНабора   КАК ДокНаб
			|				ЛЕВОЕ СОЕДИНЕНИЕ Документ." + СтруктураПараметров.ИмяТаблицы + " КАК ДокТов
			|					ПО ДокТов.КлючСтроки = ДокНаб.КлючСтроки
			|					 И ДокТов.Ссылка     = &ДокументСсылка
			|			ГДЕ
			|				ДокНаб.Ссылка = &ДокументСсылка
			|			) КАК Набор
			|
			|		) 
			|";*/
			}
			/*//Если ЕстьСоставНабора Тогда
*/
			/*// Установим параметры запроса
*/
			//ТоварыНаСкладахЗаполнитьОбщиеПараметрыЗапроса(Запрос,СтруктураШапкиДокумента);
			//Запрос.УстановитьПараметр("ПустойЗаказПокупателя", Документы.ЗаказПокупателя.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойСклад",           Справочники.Склады.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойСпособСписания",  Перечисления.СпособыСписанияОстаткаТоваров.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустоеКачество",        Справочники.Качество.ПустаяСсылка());
			/*ТекстЗапроса = УсловияТаблицыОстатков.ВременнаяТаблица + "
	|;
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                                       		КАК Номенклатура,
	|	Док.Номенклатура.Представление                         		КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 		КАК ЕдиницаХраненияОстатковПредставление,
	|   Док.ХарактеристикаНоменклатуры 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(Док.ХарактеристикаНоменклатуры) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   Док.СерияНоменклатуры 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(Док.СерияНоменклатуры) 						КАК СерияНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Склад%                                            КАК Склад, 
	|   %ПОЛЕ_Док_Качество% 										КАК Качество,
	|   СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) 
	|																КАК ДокументКоличество,
	|	ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)     КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)             КАК ОстатокКоличество,
	|	ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)             КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерииКоличество%       						КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0)     КАК КПередачеКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0) КАК КПередачеБезСерииКоличество,
	|	%ПОЛЕ_РезервыПоДокументуКоличество% 						КАК РезервыПоДокументуКоличество,
	|	%ПОЛЕ_РезервыПоДокументуБезСерии_Количество% 				КАК РезервыПоДокументуБезСерииКоличество,
	|	0 															КАК КПолучению,
	|	0                 											КАК КПолучениюПоДокументуКоличество,
	|	0 															КАК КПередачеПоДокументуКоличество,
	|	0              												КАК КПередачеПоДокументуБезСерииКоличество

	|ИЗ 
	|	"+ ТекстЗапросаРеквизитыДокумента + " КАК Док
	|
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	//таблица остатков товаров без учета серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
	|ПО 
	|	Док.Номенклатура = ОстаткиБезСерии.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = ОстаткиБезСерии.ХарактеристикаНоменклатуры", "") + "
	| //СОЕДИНЕНИЕ_Качество_ОстаткиБезСерии
	| //СОЕДИНЕНИЕ_Склад_ОстаткиБезСерии
	|
	//таблица товаров в резерве на складе без учета серий номенклатуры

	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Док.Номенклатура = Резервы.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = Резервы.ХарактеристикаНоменклатуры", "") + "
	| //СОЕДИНЕНИЕ_Склад_Резервы
	| //СОЕДИНЕНИЕ_Качество_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры
	|"+?(СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,"
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
	|ПО 
	|	Док.Номенклатура = РезервыПоСерии.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры 	= РезервыПоСерии.ХарактеристикаНоменклатуры", "") + "
	|	" + ?(СтруктураПараметров.ИспользоватьСерииНоменклатуры, "И Док.СерияНоменклатуры = РезервыПоСерии.СерияНоменклатуры", "") + "
	| //СОЕДИНЕНИЕ_Склад_РезервыПоСерии
	| //СОЕДИНЕНИЕ_Качество_Резервы
	|","")+"
	|"+?(СтруктураПараметров.ИмяДокумента = "РеализацияТоваровУслуг","
	//таблица резервов по документу: количество, которое списывается за счет резерва (эта часть требуется только для документа Реализация)
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	(ВЫБРАТЬ ТЧ.Номенклатура,
	|	ТЧ.Склад,
	|	ТЧ.ХарактеристикаНоменклатуры
	|	//ПОЛЕ_ТЧ_Серия
	|	//количество, списываемое за счет резерва, не может превышать количество указанное в документе
	|	,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА
	|   	Сумма(ТЧ.ДокументКоличество)
	|	ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
	|	КОНЕЦ КАК КоличествоОстаток
	|	ИЗ
	|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
	|		(ВЫБРАТЬ  
	|			Номенклатура,
	|			Склад,
	|			ЗаказПокупателя,
	|			ХарактеристикаНоменклатуры
	|			//ПОЛЕ_Серия
	|			,СУММА(ВЫРАЗИТЬ(Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) КАК ДокументКоличество
	|		ИЗ 
	|			" + ТекстЗапросаРеквизитыДокумента +" КАК ВремДок
	|		ГДЕ  ВремДок.Ссылка = &ДокументСсылка
	|			И ВремДок.ЗаказПокупателя <> &ПустойЗаказПокупателя
	|			И ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва
	|			//СОЕДИНЕНИЕ_РезервыПоДокументу_ДокументРезерва
	|		СГРУППИРОВАТЬ ПО
	|			Номенклатура,
	|			Склад,
	|			ЗаказПокупателя,
	|			ХарактеристикаНоменклатуры
	|			//ПОЛЕ_Серия
	|		) КАК ТЧ
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
	|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
	|		И ТЧ.Склад = ВремРезервы.Склад
	|		И ТЧ.ЗаказПокупателя = ВремРезервы.ДокументРезерва
	|		" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И ТЧ.ХарактеристикаНоменклатуры = ВремРезервы.ХарактеристикаНоменклатуры", "") + "
	|		//СОЕДИНЕНИЕ_Серия_ВремРезервы
	|	СГРУППИРОВАТЬ ПО 
	|		ТЧ.Номенклатура,
	|		ТЧ.Склад,
	|		ТЧ.ХарактеристикаНоменклатуры
	|		//ПОЛЕ_ТЧ_Серия
	|) КАК РезервыПоДокументу
	|ПО 
	|	Док.Номенклатура                 = РезервыПоДокументу.Номенклатура
	|	И Док.Склад = РезервыПоДокументу.Склад
	|	И Док.ЗаказПокупателя <> &ПустойЗаказПокупателя И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = РезервыПоДокументу.ХарактеристикаНоменклатуры", "") + "
	|	//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу
	
	//таблица резервов по документу без учета серий: количество, которое списывается за счет резерва 
    |//ЗАПРОС_РезервыПоДокументуБезСерии

    |","")+"
	
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО 
	|	Док.Номенклатура = ТоварыКПередаче.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = ТоварыКПередаче.ХарактеристикаНоменклатуры", "") + "
	|	" + ?(СтруктураПараметров.ИспользоватьСерииНоменклатуры, "И Док.СерияНоменклатуры = ТоварыКПередаче.СерияНоменклатуры", "") + "
	|	//СОЕДИНЕНИЕ_Склад_ТоварыКПередаче
	|	//СОЕДИНЕНИЕ_Качество_ТоварыКПередаче
	
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
	|ПО 
	|	Док.Номенклатура = ТоварыКПередачеБезСерии.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = ТоварыКПередачеБезСерии.ХарактеристикаНоменклатуры", "") + "
	|	//СОЕДИНЕНИЕ_Склад_ТоварыКПередачеБезСерии
	|	//СОЕДИНЕНИЕ_Качество_ТоварыКПередачеБезСерии
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	// остатки по услугам контролировать не надо.
	|	//УСЛОВИЕ_Склад
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   Док.ХарактеристикаНоменклатуры,
	|   Док.СерияНоменклатуры,
	|   %ПОЛЕ_Док_Качество%, 									
	|    %ПОЛЕ_Док_Склад%
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|         МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(РезервыПоСерииКоличество), 
	|		Максимум(КПередачеБезСерииКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество),
	|		Максимум(КПолучению), Максимум(КПередачеПоДокументуКоличество), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|   ХарактеристикаНоменклатуры,
	|    Склад
	|	//ПОЛЕ_Качество
	|";*/
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерииКоличество%",	?(СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)","0"));
			//ТекстЗапросаРезервыПоДокументуБезСерии = "";
			if(true/*СтруктураПараметров.ИмяДокумента = "РеализацияТоваровУслуг"*/)
			{
				/*//есть реквизит ЗаказПокупателя, документ может списывать товар из резерва
*/
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*ТекстЗапросаРезервыПоДокументуБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	(ВЫБРАТЬ ТЧ.Номенклатура,
			|	ТЧ.Склад,
			|	ТЧ.ХарактеристикаНоменклатуры
			|	//количество, списываемое за счет резерва, не может превышать количество указанное в документе
			|	,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА
			|   	Сумма(ТЧ.ДокументКоличество)
			|	ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
			|	КОНЕЦ КАК КоличествоОстаток
			|	ИЗ
			|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
			|		(ВЫБРАТЬ  
			|			Номенклатура,
			|			Склад,
			|			ЗаказПокупателя,
			|			ХарактеристикаНоменклатуры
			|			,СУММА(ВЫРАЗИТЬ(Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) КАК ДокументКоличество
			|		ИЗ 
			|			" + ТекстЗапросаРеквизитыДокумента +" КАК ВремДок
			|		ГДЕ  ВремДок.Ссылка = &ДокументСсылка
			|			И ВремДок.ЗаказПокупателя <> &ПустойЗаказПокупателя и ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва
			|		СГРУППИРОВАТЬ ПО
			|			Номенклатура,
			|			Склад,
			|			ЗаказПокупателя,
			|			ХарактеристикаНоменклатуры
			|		) КАК ТЧ
			|	ЛЕВОЕ СОЕДИНЕНИЕ 
			|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
			|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
			|		И ТЧ.Склад = ВремРезервы.Склад
			|		И ТЧ.ЗаказПокупателя = ВремРезервы.ДокументРезерва
			|		" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И ТЧ.ХарактеристикаНоменклатуры = ВремРезервы.ХарактеристикаНоменклатуры", "") + "
			|	СГРУППИРОВАТЬ ПО 
			|		ТЧ.Номенклатура,
			|		ТЧ.Склад,
			|		ТЧ.ХарактеристикаНоменклатуры
			|) КАК РезервыПоДокументуБезСерии
			|ПО 
			|	Док.Номенклатура                 = РезервыПоДокументуБезСерии.Номенклатура
			|	И Док.Склад = РезервыПоДокументуБезСерии.Склад
			|	И Док.ЗаказПокупателя <> &ПустойЗаказПокупателя И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
			|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = РезервыПоДокументуБезСерии.ХарактеристикаНоменклатуры", "");*/
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии",	ТекстЗапросаРезервыПоДокументуБезСерии);
					/*//резервы по документу имеет смысл определять с точностью до серии
*/
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия",							",ТЧ.СерияНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия",								",СерияНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_РезервыПоДокументу_ДокументРезерва", "И ЕСТЬNULL(ВЫРАЗИТЬ(ВремДок.ЗаказПокупателя КАК Документ.ЗаказПокупателя).ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей, ИСТИНА)");
					if(true/*СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
					{
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ВремРезервы",			"И ТЧ.СерияНоменклатуры = ВремРезервы.СерияНоменклатуры");
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу",	"И Док.СерияНоменклатуры = РезервыПоДокументу.СерияНоменклатуры");
					}
				}
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуКоличество%",		"ЕстьNull(Максимум(РезервыПоДокументу.КоличествоОстаток),0)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ЗаказПокупателя%",					"ЗаказПокупателя");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_ЗаказПокупателя%",				"ДокТов.ЗаказПокупателя");
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%",		?(ТекстЗапросаРезервыПоДокументуБезСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)",	"0"));
			if(true/*ЕстьКачество*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Качество%",						"Качество");
				/*ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_Качество%",				"ВЫБОР КОГДА ДокНаб.Качество = &ПустоеКачество ТОГДА ДокТов.Качество
																						|ИНАЧЕ ДокНаб.Качество КОНЕЦ");*/
			}
			if(true/*ЕстьСпособСписания*/)
			{
				/*ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров%",	"ВЫБОР КОГДА ДокНаб.СпособСписанияОстаткаТоваров = &ПустойСпособСписания ТОГДА ДокТов.СпособСписанияОстаткаТоваров
																								|ИНАЧЕ ДокНаб.СпособСписанияОстаткаТоваров КОНЕЦ");*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_СпособСписанияОстаткаТоваров%",			" СпособСписанияОстаткаТоваров");
			}
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,Истина,,Истина,,ложь,ЕстьКачество,ЕстьСкладВТабЧасти);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыНаСкладахОбработатьРезультатЗапроса(Выборка,истина,ТекстЗапросаРезервыПоДокументуБезСерии<>"",СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		//КонтрольОстатков_Реализация_ОтчетОРознПродажах()
		// Процедура контролирует остати для документов, у которых документ резерва находится в табличной части
		//	Особенность документа:
		//	Наличие документа резерва в табличной части.
		//	В связи с этим документ резерва извлекается из таб части документа и используется соединение
		//	с виртуальными таблицами по документу резерва
		//

		public void ТоварыНаСкладахКонтрольОстатков_ЗаказВТабЧасти(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ТекстСерия 			     = "СерияНоменклатуры";
			//ТекстХарактеристика      = "ХарактеристикаНоменклатуры";
			//ЕстьСерия                = МетаданныеТабЧасти.Реквизиты.Найти(ТекстСерия) <> Неопределено;
			//ЕстьХарактеристика       = МетаданныеТабЧасти.Реквизиты.Найти(ТекстХарактеристика) <> Неопределено;
			//ЕстьКоэффициент          = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент") <> Неопределено;
			//ЕстьКачество             = МетаданныеТабЧасти.Реквизиты.Найти("Качество") <> Неопределено;
			//ЕстьСкладВТабличнойЧасти = МетаданныеТабЧасти.Реквизиты.Найти("Склад") <> Неопределено;
			//ЕстьСпособСписания 	     = МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров") <> Неопределено;
			//ИмяРеквизитаЗаказ = "ЗаказПокупателя";
			if(true/*СтруктураПараметров.ИмяДокумента = "ТребованиеНакладная"*/)
			{
				//ИмяРеквизитаЗаказ = "ЗаказРезерв";
			}
			//Запрос = Новый Запрос;
			/*ПараметрыУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество",
			ЕстьХарактеристика,
			ЕстьКачество);*/
			//ПараметрыУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//ПараметрыУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			if(true/*ЕстьСкладВТабличнойЧасти*/)
			{
				//ПараметрыУсловий.Вставить("ПолеСклад", "Склад");
			}
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			ПараметрыУсловий);*/
			//ТоварыНаСкладахЗаполнитьОбщиеПараметрыЗапроса(Запрос,СтруктураШапкиДокумента);
			if(true/*НЕ ЕстьСкладВТабличнойЧасти*/)
			{
				//Запрос.УстановитьПараметр("Склад",  СтруктураШапкиДокумента.Склад);
			}
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(МетаданныеТабЧасти.Реквизиты[ИмяРеквизитаЗаказ].Тип);
			//Запрос.УстановитьПараметр("МассивПустыхЗаказов",МассивПустыхСсылок);
			//ДокументПередачи = "";
			if(true/*СтруктураПараметров.ИмяДокумента = "РасходныйОрдерНаТовары"*/)
			{
				//ДокументПередачи = СтруктураШапкиДокумента.ДокументПередачи;
				//Запрос.УстановитьПараметр("ДокументПередачи",  ДокументПередачи);
			}
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                                       		КАК Номенклатура,
	|	Док.Номенклатура.Представление                         		КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 		КАК ЕдиницаХраненияОстатковПредставление,
	|   %ПОЛЕ_Док_Характеристика% 									КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 					КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 											КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 							КАК СерияНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Склад%                                            КАК Склад, 
	|   %ПОЛЕ_Док_Качество% 										КАК Качество,
	|   %ПОЛЕ_Док_Количество%										КАК ДокументКоличество,
	|	%ПОЛЕ_ОстаткиБезСерии_Количество%     						КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)             КАК ОстатокКоличество,
	|	ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)             КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерии_Количество%      						КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0)     КАК КПередачеКоличество,
	|	%ПОЛЕ_КПередачеБезСерии_Количество% 						КАК КПередачеБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(РезервыПоДокументу.КоличествоОстаток),0) 	КАК РезервыПоДокументуКоличество,
	|	%ПОЛЕ_РезервыПоДокументуБезСерии_Количество% 				КАК РезервыПоДокументуБезСерииКоличество,
	|	%ПОЛЕ_КПередачеПоДокументу_Количество% 						КАК КПередачеПоДокументуКоличество,
	|	%ПОЛЕ_КПередачеПоДокументуБезСерии_Количество%              КАК КПередачеПоДокументуБезСерииКоличество,
	|	0 	 														КАК КПолучению,
	|	0 															КАК КПолучениюПоДокументуКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	
	//таблица остатков товаров без учета серий
	|//ЗАПРОС_ОстаткиБезСерии
	|
	
	//таблица товаров в резерве на складе без учета серий номенклатуры
    |ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Док.Номенклатура = Резервы.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Резервы 
	| 	//СОЕДИНЕНИЕ_Склад_Резервы
	|   //СОЕДИНЕНИЕ_Качество_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры
	|//ЗАПРОС_РезервыПоСерии

	//таблица резервов по документу: количество, которое списывается за счет резерва 
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	(ВЫБРАТЬ
	|		ТЧ.Номенклатура
	|		//ПОЛЕ_ТЧ_Склад
	|		//ПОЛЕ_ТЧ_Характеристика
	|		//ПОЛЕ_ТЧ_Серия
	|		//количество, списываемое за счет резерва, не может превышать количество указанное в документе
	|		,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) 
	|			ТОГДА Сумма(ТЧ.ДокументКоличество)
	|			ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
	|		КОНЕЦ КАК КоличествоОстаток
	|	ИЗ
	|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
	|		(ВЫБРАТЬ  
	|			Номенклатура,
	|			%ПОЛЕ_Заказ% КАК ДокументРезерва
	|			//ПОЛЕ_Характеристика
	|			//ПОЛЕ_Серия
	|			//ПОЛЕ_Склад
	|			,%ПОЛЕ_Количество% КАК ДокументКоличество
	|		ИЗ 
	|			Документ." + СтруктураПараметров.ИмяТаблицы +" КАК ВремДок
	|		ГДЕ 
	|			ВремДок.Ссылка = &ДокументСсылка
	|			И ВремДок.%ПОЛЕ_Заказ% НЕ в (&МассивПустыхЗаказов)
	|			//УСЛОВИЕ_ВремДок_СпособСписанияРезерв
    |			//УСЛОВИЕ_ВремДок_ОУ
	|		СГРУППИРОВАТЬ ПО
	|			Номенклатура,
	|			%ПОЛЕ_Заказ%
	|			//ПОЛЕ_Характеристика
	|			//ПОЛЕ_Серия
	|			//ПОЛЕ_Склад
	|		) КАК ТЧ
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
	|	ПО 
	|		ВремРезервы.Склад = %СОЕДИНЕНИЕ_Склад_ВремРезервы%
	|		И ВремРезервы.Номенклатура = ТЧ.Номенклатура
	|		И ВремРезервы.ДокументРезерва = ТЧ.ДокументРезерва
	|		И ВремРезервы.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_ВремРезервы%
	|		И ВремРезервы.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_ВремРезервы%
	|
	|	СГРУППИРОВАТЬ ПО 
	|		ТЧ.Номенклатура
	|		//ПОЛЕ_ТЧ_Характеристика
	|		//ПОЛЕ_ТЧ_Серия
	|		//ПОЛЕ_ТЧ_Склад
	|) КАК РезервыПоДокументу
	|ПО 
	|	Док.Номенклатура = РезервыПоДокументу.Номенклатура
	|	И Док.%ПОЛЕ_Заказ% НЕ в (&МассивПустыхЗаказов)
	|	//УСЛОВИЕ_Док_СпособСписанияРезерв
	|	//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументу
	|	//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу
	|	//СОЕДИНЕНИЕ_Склад_РезервыПоДокументу

	//таблица резервов по документу без учета серий: количество, которое списывается за счет резерва 
    |//ЗАПРОС_РезервыПоДокументуБезСерии

	//товары к передаче
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО 
	|	Док.Номенклатура = ТоварыКПередаче.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
	|   //СОЕДИНЕНИЕ_Серия_ТоварыКПередаче
	| 	//СОЕДИНЕНИЕ_Качество_ТоварыКПередаче
	| 	//СОЕДИНЕНИЕ_Склад_ТоварыКПередаче
	
	//товары к передаче со складов без учета серий
	|//ЗАПРОС_ТоварыКПередачеБезСерии

	//товары к передаче по документу
	|//ЗАПРОС_КПередачеПоДокументу

	//товары к передаче по документу без учета серий
	|//ЗАПРОС_КПередачеПоДокументуБезСерии
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	// остатки по услугам контролировать не надо.
	|   //УСЛОВИЕ_Склад
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%,
	|   %ПОЛЕ_Док_Качество%, 									
	|   %ПОЛЕ_Док_Склад% 
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|         МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(РезервыПоСерииКоличество), 
	|	МАКСИМУМ(КПередачеПоДокументуКоличество), Максимум(КПередачеБезСерииКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество), 
	|	Максимум(КПолучению), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|   ХарактеристикаНоменклатуры
	|   //ПОЛЕ_Склад
	|	//ПОЛЕ_Качество
	|";*/
			//ТекстЗапросаРезервыПоСерии = "";
			//ТекстЗапросаОстаткиБезСерии = "";
			//ТекстЗапросаКПередачеБезСерии = "";
			//ТекстЗапросаКПередачеПоДокументу = "";
			//ТекстЗапросаКПередачеПоДокументуБезСерии = "";
			//ТекстЗапросаРезервыПоДокументуБезСерии = "";
			//ТекстУсловиеОУ = "";
			if(true/*ЕстьСерия*/)
			{
				/*ТекстЗапросаОстаткиБезСерии = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
		|ПО 
		|	Док.Номенклатура = ОстаткиБезСерии.Номенклатура
		| //СОЕДИНЕНИЕ_Характеристика_ОстаткиБезСерии
		| //СОЕДИНЕНИЕ_Качество_ОстаткиБезСерии
		| //СОЕДИНЕНИЕ_Склад_ОстаткиБезСерии";*/
				/*ТекстЗапросаКПередачеБезСерии = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
		|ПО 
		|	Док.Номенклатура                = ТоварыКПередачеБезСерии.Номенклатура
		|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередачеБезСерии
		| 	//СОЕДИНЕНИЕ_Качество_ТоварыКПередачеБезСерии
		| 	//СОЕДИНЕНИЕ_Склад_ТоварыКПередачеБезСерии";*/
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*ТекстЗапросаРезервыПоСерии="
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
			|ПО 
			|	Док.Номенклатура = РезервыПоСерии.Номенклатура
			|   //СОЕДИНЕНИЕ_Характеристика_РезервыПоСерии 
			|   //СОЕДИНЕНИЕ_Серия_РезервыПоСерии 
			|   //СОЕДИНЕНИЕ_Склад_РезервыПоСерии
			|   //СОЕДИНЕНИЕ_Качество_Резервы
			|";*/
					/*ТекстЗапросаРезервыПоДокументуБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	(ВЫБРАТЬ ТЧ.Номенклатура
			|	//ПОЛЕ_ТЧ_Склад
			|	//ПОЛЕ_ТЧ_Характеристика
			|	//количество, списываемое за счет резерва, не может превышать количество указанное в документе
			|	,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА
			|   	Сумма(ТЧ.ДокументКоличество)
			|	ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
			|	КОНЕЦ КАК КоличествоОстаток
			|	ИЗ
			|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
			|		(ВЫБРАТЬ  
			|			Номенклатура,
			|			%ПОЛЕ_Заказ%
			|			//ПОЛЕ_Характеристика
			|			//ПОЛЕ_Склад
			|			,%ПОЛЕ_Количество% КАК ДокументКоличество
			|		ИЗ 
			|			Документ." + СтруктураПараметров.ИмяТаблицы +" КАК ВремДок
			|		ГДЕ  ВремДок.Ссылка = &ДокументСсылка
			|			И ВремДок.%ПОЛЕ_Заказ% НЕ в (&МассивПустыхЗаказов)
			|			//УСЛОВИЕ_ВремДок_СпособСписанияРезерв
			|		СГРУППИРОВАТЬ ПО
			|			Номенклатура,
			|			%ПОЛЕ_Заказ%
			|			//ПОЛЕ_Характеристика
			|			//ПОЛЕ_Склад
			|		) КАК ТЧ
			|	ЛЕВОЕ СОЕДИНЕНИЕ 
			|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
			|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
			|		И ТЧ.%ПОЛЕ_Заказ% = ВремРезервы.ДокументРезерва
			|		//СОЕДИНЕНИЕ_Характеристика_ВремРезервы
			|		//СОЕДИНЕНИЕ_Склад_ВремРезервы
			|	СГРУППИРОВАТЬ ПО 
			|		ТЧ.Номенклатура
			|		//ПОЛЕ_ТЧ_Характеристика
			|		//ПОЛЕ_ТЧ_Склад
			|) КАК РезервыПоДокументуБезСерии
			|ПО 
			|Док.Номенклатура                 = РезервыПоДокументуБезСерии.Номенклатура
			|И Док.%ПОЛЕ_Заказ% НЕ в (&МассивПустыхЗаказов)
			|	//УСЛОВИЕ_Док_СпособСписанияРезерв
			|//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументуБезСерии
			|//СОЕДИНЕНИЕ_Склад_РезервыПоДокументуБезСерии";*/
					//ТекстУсловиеОУ = " И ЕСТЬNULL(ВЫРАЗИТЬ(ВремДок.%ПОЛЕ_Заказ% КАК Документ.ЗаказПокупателя).ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей, ИСТИНА)";
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//УСЛОВИЕ_ВремДок_ОУ", ТекстУсловиеОУ);
				}
				/*//Если СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании Тогда
*/
			}
			/*//Если ЕстьСерия Тогда
*/
			if(true/*СтруктураПараметров.ИмяДокумента = "РасходныйОрдерНаТовары" И ЗначениеЗаполнено(ДокументПередачи)*/)
			{
				/*ТекстЗапросаКПередачеПоДокументу = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + " 
		|			И ДокументПередачи = &ДокументПередачи ) КАК КПередачеПоДокументу
		|ПО 
		|	Док.Номенклатура = КПередачеПоДокументу.Номенклатура
        |	//СОЕДИНЕНИЕ_Характеристика_КПередачеПоДокументу 
		|	//СОЕДИНЕНИЕ_Серия_КПередачеПоДокументу 
		|	//СОЕДИНЕНИЕ_Склад_КПередачеПоДокументу 
		|	//СОЕДИНЕНИЕ_Качество_КПередачеПоДокументу
		|";*/
				if(true/*ЕстьСерия*/)
				{
					/*ТекстЗапросаКПередачеПоДокументуБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + " 
			|			И ДокументПередачи = &ДокументПередачи ) КАК КПередачеПоДокументуБезСерии
			|ПО 
			|	Док.Номенклатура = КПередачеПоДокументуБезСерии.Номенклатура
	        |	//СОЕДИНЕНИЕ_Характеристика_КПередачеПоДокументуБезСерии 
			|	//СОЕДИНЕНИЕ_Склад_КПередачеПоДокументуБезСерии 
			|	//СОЕДИНЕНИЕ_Качество_КПередачеПоДокументуБезСерии 
			|";*/
				}
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоСерии",				ТекстЗапросаРезервыПоСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ОстаткиБезСерии",				ТекстЗапросаОстаткиБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_КПередачеПоДокументуБезСерии",ТекстЗапросаКПередачеПоДокументуБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_КПередачеПоДокументу",		ТекстЗапросаКПередачеПоДокументу);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ТоварыКПередачеБезСерии",		ТекстЗапросаКПередачеБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии",	ТекстЗапросаРезервыПоДокументуБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерии_Количество%",				?(ТекстЗапросаРезервыПоСерии<>"",				"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)",			"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ОстаткиБезСерии_Количество%",			?(ТекстЗапросаОстаткиБезСерии<>"",				"ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)",			"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеПоДокументуБезСерии_Количество%",?(ТекстЗапросаКПередачеПоДокументуБезСерии<>"","ЕстьNull(МАКСИМУМ(КПередачеПоДокументуБезСерии.КоличествоОстаток),0)","0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеПоДокументу_Количество%",		?(ТекстЗапросаКПередачеПоДокументу<>"",			"ЕстьNull(МАКСИМУМ(КПередачеПоДокументу.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеБезСерии_Количество%",			?(ТекстЗапросаКПередачеБезСерии<>"",			"ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%",	?(ТекстЗапросаРезервыПоДокументуБезСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)",	"0"));
			if(true/*ЕстьСерия*/)
			{
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*//резервы по документу имеет смысл определять с точностью до серии
*/
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия",						",ТЧ."+ТекстСерия);
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия",							","+ТекстСерия);
					if(true/*СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
					{
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоСерии",	"И Док."+ТекстСерия+" = РезервыПоСерии.СерияНоменклатуры");
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу","И Док."+ТекстСерия+" = РезервыПоДокументу."+ТекстСерия);
					}
				}
			}
			/*//Если ЕстьСерия Тогда
*/
			if(true/*ЕстьСпособСписания*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//УСЛОВИЕ_Док_СпособСписанияРезерв",		"И Док.СпособСписанияОстаткаТоваров = &ИзРезерва");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//УСЛОВИЕ_ВремДок_СпособСписанияРезерв",	"И ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва");
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Заказ%",	ИмяРеквизитаЗаказ);
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,ТекстХарактеристика,ЕстьСерия,ТекстСерия,ЕстьКоэффициент,ЕстьКачество,ЕстьСкладВТабличнойЧасти);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыНаСкладахОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ТекстЗапросаРезервыПоДокументуБезСерии<>"",СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		//КонтрольОстатков_ЗаказВТабЧасти
		// Процедура контролирует остати для документов, у которых склад указан в шапке, документ резерва находится в шапке
		//

		public void ТоварыНаСкладахКонтрольОстатков_СкладВТабЧасти_ЗаказВШапке(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьСпособСписания  = МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров")	<> Неопределено;
			//ЕстьСерия           = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры")               <> Неопределено;
			//ЕстьХарактеристика  = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")      <> Неопределено;
			//ЕстьКоэффициент     = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                  	<> Неопределено;
			//ИмяРеквизитаЗаказ = "Сделка";
			//Заказ = СтруктураШапкиДокумента[ИмяРеквизитаЗаказ];
			/*ПараметрыУсловий = Новый Структура(
			"ЕстьХарактеристика,ПолеСклад",
			ЕстьХарактеристика,
			"Склад");*/
			//ПараметрыУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//ПараметрыУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			ПараметрыУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//ТоварыНаСкладахЗаполнитьОбщиеПараметрыЗапроса(Запрос,СтруктураШапкиДокумента);
			//Запрос.УстановитьПараметр("Заказ", Заказ);
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(СтруктураПараметров.МетаданныеДокумента.Реквизиты[ИмяРеквизитаЗаказ].Тип);
			//Запрос.УстановитьПараметр("МассивПустыхЗаказов",МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                                       	КАК Номенклатура,
	|	Док.Номенклатура.Представление                         	КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 	КАК ЕдиницаХраненияОстатковПредставление,
	|	&Новый 													КАК Качество,
	|   %ПОЛЕ_Док_Характеристика% 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 						КАК СерияНоменклатурыПредставление,
	|   Док.Склад                                              	КАК Склад, 
	|   %ПОЛЕ_Док_Количество% 									КАК ДокументКоличество,
	|	%ПОЛЕ_ОстаткиБезСерии_Количество%            			КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)         КАК ОстатокКоличество,
	|	%ПОЛЕ_Резервы_Количество%                    			КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерии_Количество%                    	КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0) КАК КПередачеКоличество,
	|	%ПОЛЕ_КПередачеБезСерии_Количество% 					КАК КПередачеБезСерииКоличество,
	|	%ПОЛЕ_РезервыПоДокументу_Количество% 					КАК РезервыПоДокументуКоличество,
	|	%ПОЛЕ_РезервыПоДокументуБезСерии_Количество% 			КАК РезервыПоДокументуБезСерииКоличество,
	|	0 														КАК КПолучению,
	|	0                 										КАК КПолучениюПоДокументуКоличество,
	|	0 														КАК КПередачеПоДокументуКоличество,
	|	0              											КАК КПередачеПоДокументуБезСерииКоличество

	
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	//таблица остатков товаров без учета серий
	|//ЗАПРОС_ОстаткиБезСерии
	|
	//таблица товаров в резерве на складе без учета серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|//ЗАПРОС_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|//ЗАПРОС_РезервыПоСерии
	
	//таблица резервов по документу без учета серий: количество, которое списывается за счет резерва 
    |//ЗАПРОС_РезервыПоДокументуБезСерии
	
	//таблица резервов по документу: количество, которое списывается за счет резерва 
	|//ЗАПРОС_РезервыПоДокументу
	
	//товары к передаче со складов
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО 
	|	Док.Номенклатура = ТоварыКПередаче.Номенклатура
	|	И Док.Склад = ТоварыКПередаче.Склад
	|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
	|   //СОЕДИНЕНИЕ_Серия_ТоварыКПередаче

	//товары к передаче со складов без учета серий
	|//ЗАПРОС_ТоварыКПередачеБезСерии

	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	|	И Док.Склад.ВидСклада <> &НТТ И Док.Склад.ВидСклада <> &ВидСклада
	|
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%,
	|	Док.Склад
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|         МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(РезервыПоСерииКоличество), 
	|			Максимум(КПередачеБезСерииКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество), Максимум(КПолучению), 
	|			Максимум(КПередачеПоДокументуКоличество), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|	Склад
	|";*/
			//ТекстЗапросаРезервыПоСерии = "";
			//ТекстЗапросаРезервыПоДокументу = "";
			//ТекстЗапросаОстаткиБезСерии = "";
			//ТекстЗапросаКПередачеБезСерии = "";
			//ТекстЗапросаРезервыПоДокументуБезСерии = "";
			/*ТекстЗапросаРезервы = "
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Док.Номенклатура = Резервы.Номенклатура
	|	И Док.Склад = Резервы.Склад
	|   //СОЕДИНЕНИЕ_Характеристика_Резервы";*/
			if(true/*ЕстьСерия и СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
			{
				/*ТекстЗапросаРезервыПоСерии =" 
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
			|ПО 
			|	Док.Номенклатура                = РезервыПоСерии.Номенклатура
			|	И Док.Склад 					= РезервыПоСерии.Склад
			|   //СОЕДИНЕНИЕ_Характеристика_РезервыПоСерии 
			|   //СОЕДИНЕНИЕ_Серия_РезервыПоСерии ";*/
			}
			if(true/*ЗначениеЗаполнено(Заказ)*/)
			{
				/*// если есть серия, то все списывается из резерва при условии, что договор с ОУ 
*/
				if(true/*НЕ (ЕстьСерия И СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании)
			ИЛИ СтруктураШапкиДокумента.ОбособленныйУчетТоваровПоЗаказамПокупателей*/)
				{
					/*ТекстЗапросаРезервыПоДокументу = "
			|	ЛЕВОЕ СОЕДИНЕНИЕ 
			|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(,
			|					ДокументРезерва = &Заказ 
			|					И " + УсловияТаблицыОстатков.БезКачества + "
			|	) КАК РезервыПоДокументу
			|ПО 
			|	Док.Номенклатура = РезервыПоДокументу.Номенклатура
			|	И Док.Склад = РезервыПоДокументу.Склад
			|	//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументу
			|	//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу";*/
				}
				if(true/*ЕстьСерия и СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*ТекстЗапросаРезервыПоДокументуБезСерии = "
			|	ЛЕВОЕ СОЕДИНЕНИЕ 
			|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, 
			|				ДокументРезерва = &Заказ 
			|				И " + УсловияТаблицыОстатков.БезКачества + "
			|	) КАК РезервыПоДокументуБезСерии
			|ПО 
			|	Док.Номенклатура = РезервыПоДокументуБезСерии.Номенклатура
			|	И Док.Склад = РезервыПоДокументуБезСерии.Склад
			|	//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументуБезСерии";*/
				}
			}
			if(true/*ЕстьСерия*/)
			{
				/*ТекстЗапросаОстаткиБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
			|ПО 
			|	ОстаткиБезСерии.Номенклатура = Док.Номенклатура
			|	И ОстаткиБезСерии.Склад = Док.Склад
			|	//СОЕДИНЕНИЕ_Характеристика_ОстаткиБезСерии";*/
				/*ТекстЗапросаКПередачеБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
			|ПО 
			|	ТоварыКПередачеБезСерии.Номенклатура = Док.Номенклатура
			|	И ТоварыКПередачеБезСерии.Склад = Док.Склад
			|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередачеБезСерии";*/
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоСерии",		ТекстЗапросаРезервыПоСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии",	ТекстЗапросаРезервыПоДокументуБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументу",	ТекстЗапросаРезервыПоДокументу);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_Резервы",				ТекстЗапросаРезервы);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ОстаткиБезСерии",		ТекстЗапросаОстаткиБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ТоварыКПередачеБезСерии",	ТекстЗапросаКПередачеБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерии_Количество%",				?(ТекстЗапросаРезервыПоСерии <> "",				"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументу_Количество%",			?(ТекстЗапросаРезервыПоДокументу <> "",			"ЕстьNull(МАКСИМУМ(РезервыПоДокументу.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Резервы_Количество%",					?(ТекстЗапросаРезервы <> "",					"ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)",				"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ОстаткиБезСерии_Количество%",			?(ТекстЗапросаОстаткиБезСерии <> "",			"ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеБезСерии_Количество%",			?(ТекстЗапросаКПередачеБезСерии<>"",			"ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%",	?(ТекстЗапросаРезервыПоДокументуБезСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)","0"));
			if(true/*ЕстьСерия И СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
			{
				/*//резервы по документу имеет смысл определять с точностью до серии
*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия", ",ТЧ.СерияНоменклатуры");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия",	   ",СерияНоменклатуры");
				if(true/*СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
				{
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ВремРезервы",        "И ТЧ.СерияНоменклатуры = ВремРезервы.СерияНоменклатуры ");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу", "И Док.СерияНоменклатуры = РезервыПоДокументу.СерияНоменклатуры");
				}
			}
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,,ЕстьСерия,,ЕстьКоэффициент,Ложь,Истина);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыНаСкладахОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ТекстЗапросаРезервыПоДокументуБезСерии<>"",СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		//КонтрольОстатков_СкладВТабЧасти_ЗаказВШапке()
		// Процедура контролирует остати для документов, у которых склад и документ резерва находятся в шапке
		//

		public void ТоварыНаСкладахКонтрольОстатков_СкладВШапке_ЗаказВШапке(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти<>""*/)
			{
				//ЕстьСпособСписания  = МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров")	<> Неопределено;
				//ЕстьСерия           = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры")               <> Неопределено;
				//ЕстьХарактеристика  = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")      <> Неопределено;
				//ЕстьКоэффициент     = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                  	<> Неопределено;
			}
			//ИмяРеквизитаЗаказ = "Заказ";
			if(true/*СтруктураПараметров.ИмяДокумента = "КомплектацияНоменклатуры"*/)
			{
				//ИмяРеквизитаЗаказ = "ЗаказРезерв";
			}
			//Заказ = СтруктураШапкиДОкумента[ИмяРеквизитаЗаказ];
			/*ПараметрыУсловий = Новый Структура(
			"ЕстьХарактеристика",
			ЕстьХарактеристика);*/
			//ПараметрыУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//ПараметрыУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			ПараметрыУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//ТоварыНаСкладахЗаполнитьОбщиеПараметрыЗапроса(Запрос,СтруктураШапкиДокумента);
			//Запрос.УстановитьПараметр("Склад", СтруктураШапкиДокумента.Склад);
			//Запрос.УстановитьПараметр("Заказ", Заказ);
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(СтруктураПараметров.МетаданныеДокумента.Реквизиты[ИмяРеквизитаЗаказ].Тип);
			//Запрос.УстановитьПараметр("МассивПустыхЗаказов",МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                                       	КАК Номенклатура,
	|	Док.Номенклатура.Представление                         	КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 	КАК ЕдиницаХраненияОстатковПредставление,
	|	&Новый 													КАК Качество,
	|   %ПОЛЕ_Док_Характеристика% 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 						КАК СерияНоменклатурыПредставление,
	|   &Склад                                              	КАК Склад, 
	|   %ПОЛЕ_Док_Количество% 									КАК ДокументКоличество,
	|	%ПОЛЕ_ОстаткиБезСерии_Количество%            			КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)         КАК ОстатокКоличество,
	|	%ПОЛЕ_Резервы_Количество%                    			КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерии_Количество%                    	КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0) КАК КПередачеКоличество,
	|	%ПОЛЕ_КПередачеБезСерии_Количество% 					КАК КПередачеБезСерииКоличество,
	|	%ПОЛЕ_РезервыПоДокументу_Количество% 					КАК РезервыПоДокументуКоличество,
	|	%ПОЛЕ_РезервыПоДокументуБезСерии_Количество% 			КАК РезервыПоДокументуБезСерииКоличество,
	|	0 														КАК КПолучению,
	|	0                 										КАК КПолучениюПоДокументуКоличество,
	|	0 														КАК КПередачеПоДокументуКоличество,
	|	0              											КАК КПередачеПоДокументуБезСерииКоличество

	
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	//таблица остатков товаров без учета серий
	|//ЗАПРОС_ОстаткиБезСерии
	|
	//таблица товаров в резерве на складе без учета серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|//ЗАПРОС_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|//ЗАПРОС_РезервыПоСерии
	
	//таблица резервов по документу без учета серий: количество, которое списывается за счет резерва 
    |//ЗАПРОС_РезервыПоДокументуБезСерии
	
	//таблица резервов по документу: количество, которое списывается за счет резерва 
	|//ЗАПРОС_РезервыПоДокументу
	
	//товары к передаче со складов
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО 
	|	ТоварыКПередаче.Склад = &Склад И
	|	Док.Номенклатура                = ТоварыКПередаче.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
	|   //СОЕДИНЕНИЕ_Серия_ТоварыКПередаче

	//товары к передаче со складов без учета серий
	|//ЗАПРОС_ТоварыКПередачеБезСерии

	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|         МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(РезервыПоСерииКоличество), 
	|			Максимум(КПередачеБезСерииКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество), Максимум(КПолучению), 
	|			Максимум(КПередачеПоДокументуКоличество), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%
	|";*/
			//ТекстЗапросаРезервыПоСерии = "";
			//ТекстЗапросаРезервыПоДокументу = "";
			//ТекстЗапросаОстаткиБезСерии = "";
			//ТекстЗапросаКПередачеБезСерии = "";
			//ТекстЗапросаРезервыПоДокументуБезСерии = "";
			/*ТекстЗапросаРезервы = "
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Резервы.Склад = &Склад И
	|	Док.Номенклатура = Резервы.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Резервы ";*/
			if(true/*ЕстьСерия и СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
			{
				/*ТекстЗапросаРезервыПоСерии = " 
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
			|ПО 
			|	РезервыПоСерии.Склад = &Склад И
			|	Док.Номенклатура = РезервыПоСерии.Номенклатура
			|   //СОЕДИНЕНИЕ_Характеристика_РезервыПоСерии 
			|   //СОЕДИНЕНИЕ_Серия_РезервыПоСерии ";*/
			}
			if(true/*ЗначениеЗаполнено(Заказ) 
		И НЕ ТипЗнч(Заказ)=Тип("ДокументСсылка.ЗаказПоставщику")*/)
			{
				/*//Заказ поставщику может быть указан в документе ПередачаТоваров при передаче материалов переработчику
*/
				if(true/*ЕстьСпособСписания*/)
				{
					/*//возможно списание за счет свободного остатка - необходим контроль резервов
*/
					if(true/*ЕстьСерия и СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
					{
						/*ТекстЗапросаРезервыПоДокументуБезСерии = "
				|ЛЕВОЕ СОЕДИНЕНИЕ
				|	(ВЫБРАТЬ ТЧ.Номенклатура
				|	//ПОЛЕ_ТЧ_Характеристика
				|	//количество, списываемое за счет резерва, не может превышать количество указанное в документе
				|	,ВЫБОР КОГДА Сумма(ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА
				|   	Сумма(ДокументКоличество)
				|	ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
				|	КОНЕЦ КАК КоличествоОстаток
				|	ИЗ
				|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
				|		(ВЫБРАТЬ  
				|			Номенклатура
				|			//ПОЛЕ_Характеристика
				|			,%ПОЛЕ_Количество% КАК ДокументКоличество
				|		ИЗ 
				|			Документ." + СтруктураПараметров.ИмяТаблицы +" КАК ВремДок
				|		ГДЕ  ВремДок.Ссылка = &ДокументСсылка
				|			И ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва 
				|		СГРУППИРОВАТЬ ПО
				|			Номенклатура
				|			//ПОЛЕ_Характеристика
				|		) КАК ТЧ
				|	ЛЕВОЕ СОЕДИНЕНИЕ 
				|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + "
				|			И ДокументРезерва = &Заказ
				|		) КАК ВремРезервы
				|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
				|		//СОЕДИНЕНИЕ_Характеристика_ВремРезервы
				|	СГРУППИРОВАТЬ ПО 
				|		ТЧ.Номенклатура
				|		//ПОЛЕ_ТЧ_Характеристика
				|) КАК РезервыПоДокументуБезСерии
				|ПО 
				|	Док.Номенклатура = РезервыПоДокументуБезСерии.Номенклатура
				|	И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
				|	//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументуБезСерии ";*/
					}
					/*ТекстЗапросаРезервыПоДокументу = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	(ВЫБРАТЬ ТЧ.Номенклатура
			|	//ПОЛЕ_ТЧ_Характеристика
			|	//ПОЛЕ_ТЧ_Серия
			|	//количество, списываемое за счет резерва, не может превышать количество указанное в документе
			|	,ВЫБОР КОГДА Сумма(ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА
			|   	Сумма(ДокументКоличество)
			|	ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
			|	КОНЕЦ КАК КоличествоОстаток
			|	ИЗ
			|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
			|		(ВЫБРАТЬ  
			|			Номенклатура
			|			//ПОЛЕ_Характеристика
			|			//ПОЛЕ_Серия
			|			,%ПОЛЕ_Количество% КАК ДокументКоличество
			|		ИЗ 
			|			Документ." + СтруктураПараметров.ИмяТаблицы +" КАК ВремДок
			|		ГДЕ  ВремДок.Ссылка = &ДокументСсылка
			|			И ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва 
			|		СГРУППИРОВАТЬ ПО
			|			Номенклатура
			|			//ПОЛЕ_Характеристика
			|			//ПОЛЕ_Серия
			|		) КАК ТЧ
			|	ЛЕВОЕ СОЕДИНЕНИЕ 
			|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + "
			|			И ДокументРезерва = &Заказ
			|	) КАК ВремРезервы
			|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
			|		//СОЕДИНЕНИЕ_Характеристика_ВремРезервы
			|		//СОЕДИНЕНИЕ_Серия_ВремРезервы
			|	СГРУППИРОВАТЬ ПО 
			|		ТЧ.Номенклатура
			|		//ПОЛЕ_ТЧ_Характеристика
			|		//ПОЛЕ_ТЧ_Серия
			|) КАК РезервыПоДокументу
			|ПО 
			|	Док.Номенклатура = РезервыПоДокументу.Номенклатура
			|	И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
			|	//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументу
			|	//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу ";*/
				}
				/*//Если ЕстьСпособСписания Тогда
*/
			}
			if(true/*ЕстьСерия*/)
			{
				/*ТекстЗапросаОстаткиБезСерии = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
		|ПО 
		|	ОстаткиБезСерии.Склад = &Склад И
		|	Док.Номенклатура = ОстаткиБезСерии.Номенклатура
		| //СОЕДИНЕНИЕ_Характеристика_ОстаткиБезСерии";*/
				/*ТекстЗапросаКПередачеБезСерии = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
		|ПО 
		|	ТоварыКПередачеБезСерии.Склад = &Склад
		|	И Док.Номенклатура = ТоварыКПередачеБезСерии.Номенклатура
		|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередачеБезСерии";*/
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоСерии",		ТекстЗапросаРезервыПоСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии",	ТекстЗапросаРезервыПоДокументуБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументу",	ТекстЗапросаРезервыПоДокументу);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_Резервы",				ТекстЗапросаРезервы);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ОстаткиБезСерии",		ТекстЗапросаОстаткиБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ТоварыКПередачеБезСерии",	ТекстЗапросаКПередачеБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерии_Количество%",				?(ТекстЗапросаРезервыПоСерии <> "",				"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументу_Количество%",			?(ТекстЗапросаРезервыПоДокументу <> "",			"ЕстьNull(МАКСИМУМ(РезервыПоДокументу.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Резервы_Количество%",					?(ТекстЗапросаРезервы <> "",					"ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)",				"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ОстаткиБезСерии_Количество%",			?(ТекстЗапросаОстаткиБезСерии <> "",			"ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеБезСерии_Количество%",			?(ТекстЗапросаКПередачеБезСерии<>"",			"ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%",	?(ТекстЗапросаРезервыПоДокументуБезСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)","0"));
			if(true/*ЕстьСерия И СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия",							",ТЧ.СерияНоменклатуры");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия",								",СерияНоменклатуры");
				if(true/*СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
				{
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ВремРезервы",			"И ТЧ.СерияНоменклатуры = ВремРезервы.СерияНоменклатуры ");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу",	"И Док.СерияНоменклатуры = РезервыПоДокументу.СерияНоменклатуры");
				}
			}
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,,ЕстьСерия,,ЕстьКоэффициент,ложь,ложь);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыНаСкладахОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ТекстЗапросаРезервыПоДокументуБезСерии<>"",СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		//КонтрольОстатков_СкладВШапке_ЗаказВШапке()
		// Процедура контролирует остати для документов, у которых склад в шапке, документ резерва не указывается
		//	В связи с этим:
		//	1) Используется отбор в виртуальных таблицах по складу, указанному в шапке документа
		//	2) Не требуется определять количество, которое списывается за счет резерва

		public void ТоварыНаСкладахКонтрольОстатков_БезЗаказа(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьСерия                = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры")           <> Неопределено;
			//ЕстьХарактеристика       = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")	<> Неопределено;
			//ЕстьКоэффициент          = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                 <> Неопределено;
			//ЕстьКачество             = МетаданныеТабЧасти.Реквизиты.Найти("Качество")                  	<> Неопределено;
			//ЕстьСкладВТабличнойЧасти = МетаданныеТабЧасти.Реквизиты.Найти("Склад")                  	<> Неопределено;
			if(true/*СтруктураПараметров.ИмяДокумента = "КорректировкаСерийИХарактеристикТоваров"*/)
			{
				//ТекстСерия          = "СерияНоменклатурыСтарая";
				//ТекстХарактеристика = "ХарактеристикаНоменклатурыСтарая";
				//ЕстьСерия           = Истина;
				//ЕстьХарактеристика  = Истина;
			}
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//ТоварыНаСкладахЗаполнитьОбщиеПараметрыЗапроса(Запрос,СтруктураШапкиДокумента);
			/*ПараметрыУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество,ПолеХарактеристика",
			ЕстьХарактеристика,
			ЕстьКачество,
			ТекстХарактеристика);*/
			//ПараметрыУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//ПараметрыУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			if(true/*ЕстьСкладВТабличнойЧасти*/)
			{
				//ПараметрыУсловий.Вставить("ПолеСклад", "Склад");
			}
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			ПараметрыУсловий);*/
			//Запрос.УстановитьПараметр("ПустойОрдер", Документы.ПриходныйОрдерНаТовары.ПустаяСсылка());
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура										КАК Номенклатура,
	|	Док.Номенклатура.Представление							КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление	КАК ЕдиницаХраненияОстатковПредставление,
	|	%ПОЛЕ_Док_Качество%										КАК Качество,
	|	%ПОЛЕ_Док_Характеристика%								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%)				КАК ХарактеристикаНоменклатурыПредставление,
	|	%ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%)							КАК СерияНоменклатурыПредставление,
	|	%ПОЛЕ_Док_Склад%										КАК Склад,
	|	%ПОЛЕ_Док_Количество%									КАК ДокументКоличество,
	|	%ПОЛЕ_ОстаткиБезСерии_Количество%						КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)			КАК ОстатокКоличество,
	|	ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)			КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерии_Количество%						КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0)	КАК КПередачеКоличество,
	|	%ПОЛЕ_КПередачеБезСерии_Количество%						КАК КПередачеБезСерииКоличество,
	|	0														КАК КПолучению,
	|	0														КАК КПолучениюПоДокументуКоличество,
	|	0														КАК РезервыПоДокументуКоличество,
	|	0														КАК РезервыПоДокументуБезСерииКоличество,
	|	0														КАК КПередачеПоДокументуКоличество,
	|	0														КАК КПередачеПоДокументуБезСерииКоличество
	|ИЗ
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	//таблица остатков товаров без учета серий
	|//ЗАПРОС_ОстаткиБезСерии
	|
	//таблица товаров в резерве на складе без учета серий номенклатуры 
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО
	|	Док.Номенклатура = Резервы.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Резервы
	|	//СОЕДИНЕНИЕ_Склад_Резервы
	|	//СОЕДИНЕНИЕ_Качество_Резервы

	//таблица товаров в резерве на складе с учетом серий номенклатуры 
	|//ЗАПРОС_РезервыПоСерии

	//товары к передаче со складов
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО
	|	Док.Номенклатура = ТоварыКПередаче.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
	|	//СОЕДИНЕНИЕ_Качество_ТоварыКПередаче
	|	//СОЕДИНЕНИЕ_Серия_ТоварыКПередаче
	|	//СОЕДИНЕНИЕ_Склад_ТоварыКПередаче

	//товары к передаче со складов без учета серий
	|//ЗАПРОС_ТоварыКПередачеБезСерии
	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|	%ПОЛЕ_Док_Характеристика%,
	|	%ПОЛЕ_Док_Серия%,
	|	%ПОЛЕ_Док_Качество%,
	|	%ПОЛЕ_Док_Склад%
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ
	|	СУММА(ДокументКоличество),
	|	МАКСИМУМ(ОстатокБезСерииКоличество),
	|	МАКСИМУМ(РезервыКоличество),
	|	МАКСИМУМ(КПередачеКоличество),
	|	МАКСИМУМ(РезервыПоСерииКоличество),
	|	МАКСИМУМ(КПередачеБезСерииКоличество),
	|	МАКСИМУМ(КПолучению),
	|	МАКСИМУМ(РезервыПоДокументуКоличество),
	|	МАКСИМУМ(РезервыПоДокументуБезСерииКоличество),
	|	МАКСИМУМ(КПередачеПоДокументуКоличество),
	|	МАКСИМУМ(КПередачеПоДокументуБезСерииКоличество),
	|	МАКСИМУМ(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|	%ПОЛЕ_Док_Характеристика%, %ПОЛЕ_Док_Склад%
	|	//ПОЛЕ_Качество
	|";*/
			//ТекстЗапросаРезервыПоСерии = "";
			//ТекстЗапросаОстаткиБезСерии = "";
			//ТекстЗапросаКПередачеБезСерии = "";
			if(true/*ЕстьСерия*/)
			{
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*ТекстЗапросаРезервыПоСерии =" 
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
			|ПО
			|	Док.Номенклатура = РезервыПоСерии.Номенклатура
			|	//СОЕДИНЕНИЕ_Характеристика_РезервыПоСерии
			|	//СОЕДИНЕНИЕ_Склад_РезервыПоСерии
			|	//СОЕДИНЕНИЕ_Качество_Резервы
			|	//СОЕДИНЕНИЕ_Серия_РезервыПоСерии ";*/
				}
				/*ТекстЗапросаОстаткиБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
			|ПО
			|	Док.Номенклатура = ОстаткиБезСерии.Номенклатура
			|	//СОЕДИНЕНИЕ_Качество_ОстаткиБезСерии
			|	//СОЕДИНЕНИЕ_Склад_ОстаткиБезСерии
			|	//СОЕДИНЕНИЕ_Характеристика_ОстаткиБезСерии";*/
				/*ТекстЗапросаКПередачеБезСерии = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
		|ПО
		|	Док.Номенклатура = ТоварыКПередачеБезСерии.Номенклатура
		|	//СОЕДИНЕНИЕ_Характеристика_ТоварыКПередачеБезСерии
		|	//СОЕДИНЕНИЕ_Склад_ТоварыКПередачеБезСерии
		|	//СОЕДИНЕНИЕ_Качество_ТоварыКПередачеБезСерии";*/
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоСерии",	ТекстЗапросаРезервыПоСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ОстаткиБезСерии",	ТекстЗапросаОстаткиБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ТоварыКПередачеБезСерии",	ТекстЗапросаКПередачеБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерии_Количество%",	?(ТекстЗапросаРезервыПоСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ОстаткиБезСерии_Количество%",?(ТекстЗапросаОстаткиБезСерии<>"",	"ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеБезСерии_Количество%",	?(ТекстЗапросаКПередачеБезСерии<>"",	"ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0)",	"0"));
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,ТекстХарактеристика,ЕстьСерия,ТекстСерия,ЕстьКоэффициент,ЕстьКачество,ЕстьСкладВТабличнойЧасти);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыНаСкладахОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ложь,СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		// Вспомогательная процедура для установки некоторых общих для многих процедур параметров запроса
		//

		public void ТоварыНаСкладахЗаполнитьОбщиеПараметрыЗапроса(/*Запрос, СтруктураШапкиДокумента*/)
		{
			//Запрос.УстановитьПараметр("ДокументСсылка",			СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("Новый",          		Справочники.Качество.Новый);
			//Запрос.УстановитьПараметр("ПустаяХарактеристика",  	Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяСерия",  			Справочники.СерииНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ИзРезерва",      		Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва);
			//Запрос.УстановитьПараметр("НТТ",                   	Перечисления.ВидыСкладов.НТТ);
			//Запрос.УстановитьПараметр("ВидСклада",              Перечисления.ВидыСкладов.Розничный);
		}
		// Процедура проверяет полученные остатки
		//

		public void ТоварыНаСкладахОбработатьРезультатЗапроса(/*Выборка,ЕстьСерия,ЕстьРезервыПоДокументуБезСерии,ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ*/)
		{
			while(true/*Выборка.Следующий()*/)
			{
				if(true/*Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке*/)
				{
					//ДокументКоличествоБезСерии = Выборка.ДокументКоличество;
					//РезервыПоДокументуБезСерииКоличество   = ?(ЕстьРезервыПоДокументуБезСерии,Выборка.РезервыПоДокументуБезСерииКоличество,Выборка.РезервыПоДокументуКоличество);
				}
				//ДокументКоличество             = Выборка.ДокументКоличество;
				//КоличествоНаСкладе             = Выборка.ОстатокКоличество;
				//КоличествоВРезерве             = Выборка.РезервыКоличество;
				//КоличествоВРезервеПоСерии      = Выборка.РезервыПоСерииКоличество;
				//РезервыПоДокументуКоличество   = Выборка.РезервыПоДокументуКоличество;
				//КПередачеКоличество            = Выборка.КПередачеКоличество;
				//КПередачеБезСерииКоличество    = ?(ЕстьСерия,Выборка.КПередачеБезСерииКоличество,КПередачеКоличество);
				//КПередачеПоДокументуКоличество = Выборка.КПередачеПоДокументуКоличество;
				//КПередачеПоДокументуБезСерииКоличество = ?(ЕстьСерия,Выборка.КПередачеПоДокументуБезСерииКоличество,Выборка.КПередачеПоДокументуКоличество);
				//КПолучениюКоличество           = Выборка.КПолучению;
				//КПолучениюПоДокументуКоличество = Выборка.КПолучениюПоДокументуКоличество;
				//КПолучениюКоличествоБезСерии	= ?(ЕстьСерия, 0, Выборка.КПолучению);
				//КПолучениюПоДокументуКоличествоБезСерии = ?(ЕстьСерия, 0, Выборка.КПолучениюПоДокументуКоличество);
				/*НедоступноНаСкладе = Макс(КоличествоВРезерве - РезервыПоДокументуБезСерииКоличество,0)
			+ Макс(КПередачеБезСерииКоличество - КПередачеПоДокументуБезСерииКоличество,0)
			+ Макс(КПолучениюКоличествоБезСерии-КПолучениюПоДокументуКоличествоБезСерии,0);*/
				/*// Сначала проверяем остаток товара на складе с учетом серий,
*/
				/*// потом свободный остаток товара (без учета серий)
*/
				if(true/*ЕстьСерия*/)
				{
					//КоличествоБезРезерва = КоличествоНаСкладе;
					//мКоличествоВРезерве = 0;
					/*// если серия не заполнена - уменьшать свободный остаток на количество резерва и товаров к передаче нельзя, 
*/
					/*// т.к. может попасть резервирование или товары к передаче, выполненные без учета серии 
*/
					if(true/*ЗначениеЗаполнено(Выборка.СерияНоменклатуры)*/)
					{
						if(true/*ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
						{
							/*//может иметься резерв в разрезе серий - его надо убрать из свободного остатка
*/
							//мКоличествоВРезерве = Макс(КоличествоВРезервеПоСерии - РезервыПоДокументуКоличество,0);
							//КоличествоБезРезерва = КоличествоНаСкладе - мКоличествоВРезерве;
						}
						//КоличествоБезРезерва = КоличествоБезРезерва - КПередачеКОличество + КПередачеПоДокументуКоличество - Макс(КПолучениюКоличество - КПолучениюПоДокументуКоличество, 0);
					}
					if(true/*КоличествоБезРезерва < ДокументКоличество*/)
					{
						/*// Требуемое количество товара
*/
						/*// Свободное количество товара
*/
						/*// Количество в резерве
*/
						/*// Склад (представление)
*/
						/*// Заказ поставщику (представление)
*/
						/*// Номенклатура (представление)
*/
						/*// Характеристика (представление)
*/
						/*// Серия номенклатуры (представление)
*/
						/*// Качество товара (представление)
*/
						/*// Единица хранения остатков (представление)
*/
						//);
					}
					//КоличествоНаСкладе = Выборка.ОстатокБезСерииКоличество;
					//ДокументКоличество = ДокументКоличествоБезСерии;
				}
				if(true/*КоличествоНаСкладе - НедоступноНаСкладе < ДокументКоличество*/)
				{
					/*// Требуемое количество товара
*/
					/*// Свободное количество товара
*/
					/*// Количество товара в резерве
*/
					/*// Количество товара к передаче
*/
					/*// Склад (представление)
*/
					/*// Заказ поставщику (представление)
*/
					/*// Номенклатура (представление)
*/
					/*// Характеристика (представление)
*/
					/*// Серия номенклатуры (представление)
*/
					/*// Качество товара (представление)
*/
					/*// Единица хранения остатков (представление)
*/
					//);
					//ДокументКоличествоБезСерии = 0;
				}
			}
			//;;
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ТоварыВРознице
		// Процедура контролирует остаток по переданному документу и его табличной части.
		// В случае недостатка товаров выставляется флаг отказа и выдается сообщение.
		//
		// Параметры:
		//  ИмяТабличнойЧасти		- строка, имя табличной части, которая проводится по регистру,
		//  СтруктураШапкиДокумента	- структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  ОтказПроведения			- флаг отказа в проведении,
		//  ЗаголовокСообщения		- строка, заголовок сообщения об ошибке проведения.
		//	РежимПроведения				- РежимПроведенияДокумента
		//

		public void ТоварыВРозницеКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			if(true/*УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровНаСкладе()*/)
			{
			}
			if(true/*глЗначениеПеременной("ИспользоватьРегистрСвободныеОстатки")*/)
			{
				//СвободныеОстаткиКонтрольОстатков(ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения);
			}
			//Отказ     = ОтказПроведения;
			//Заголовок = ЗаголовокСообщения;
			//МетаданныеДокумента = СтруктураШапкиДокумента.Ссылка.Метаданные();
			//ИмяДокумента        = МетаданныеДокумента.Имя;
			//ИмяТаблицы          = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			//ИспользоватьУказаниеСерийНоменклатурыПриРезервировании = глЗначениеПеременной("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании");
			if(true/*ИмяТабличнойЧасти <> ""*/)
			{
				//МетаданныеТабЧасти = МетаданныеДокумента.ТабличныеЧасти[ИмяТабличнойЧасти];
			}
			//ИспользоватьХарактеристикиНоменклатуры = глЗначениеПеременной("ИспользоватьХарактеристикиНоменклатуры");
			//ИспользоватьСерииНоменклатуры = глЗначениеПеременной("ИспользоватьСерииНоменклатуры");
			//СтруктураПараметров = Новый Структура;
			//СтруктураПараметров.Вставить("МетаданныеДокумента",	МетаданныеДокумента);
			//СтруктураПараметров.Вставить("ИмяДокумента", 		ИмяДокумента);
			//СтруктураПараметров.Вставить("ИмяТабличнойЧасти", 	ИмяТабличнойЧасти);
			//СтруктураПараметров.Вставить("ИмяТаблицы", 			ИмяТаблицы);
			//СтруктураПараметров.Вставить("Отказ", 				Отказ);
			//СтруктураПараметров.Вставить("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании",	ИспользоватьУказаниеСерийНоменклатурыПриРезервировании);
			//СтруктураПараметров.Вставить("ИспользоватьХарактеристикиНоменклатуры", ИспользоватьХарактеристикиНоменклатуры);
			//СтруктураПараметров.Вставить("ИспользоватьСерииНоменклатуры",			ИспользоватьСерииНоменклатуры);
			//СтруктураПараметров.Вставить("РегистрОстаткиТоваров", "ТоварыВРознице");
			if(true/*СтруктураПараметров.ИмяДокумента = "ПеремещениеТоваров"*/)
			{
				//ТоварыНаСкладахКонтрольОстатков_ПеремещениеТоваров(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
			}
			/*//вернем обратно признак отказа от проведения документа 
*/
			//ОтказПроведения = Отказ;
			//ЗаголовокСообщения = Заголовок;
		}
		// КонтрольОстатков()
		//Процедура контролирует остаток для документов РеализацияТоваровИУслуг, ЧекККМ и ОтчетОРозничныхПродажах (таб части Товары и СоставНабора)
		//Особенность документа - наличие дополнительной табличной части "Состав набора"

		public void ТоварыВРозницеКонтрольОстатков_Реализация_ОтчетОРознПродажах_ЧекККМ(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьХарактеристика = Истина;
			//ЕстьКачество       = МетаданныеТабЧасти.Реквизиты.Найти("Качество") <> Неопределено;
			//ЕстьСпособСписания = МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров")	<> Неопределено;
			//ЕстьСкладВТабЧасти = МетаданныеТабЧасти.Реквизиты.Найти("Склад") <> Неопределено;
			//ЕстьСоставНабора   = Истина;
			if(true/*ЕстьСоставНабора*/)
			{
				/*ТекстЗапросаРеквизитыДокумента = "
			|	(ВЫБРАТЬ
			//строки ТЧ Товары которые не являются набором
			|		Ссылка,
			|		Номенклатура,
			|		%ПОЛЕ_Склад%,
			|		%ПОЛЕ_СпособСписанияОстаткаТоваров% КАК СпособСписанияОстаткаТоваров,   
			|		%ПОЛЕ_Качество% КАК Качество,                       
			|		ХарактеристикаНоменклатуры,
			|		СерияНоменклатуры,
			|		Коэффициент,
			|		%ПОЛЕ_ЗаказПокупателя% КАК ЗаказПокупателя, 
			|		Количество
			|		ИЗ
			|			Документ." + СтруктураПараметров.ИмяТаблицы + " 
			|		ГДЕ
			|			Ссылка = &ДокументСсылка
			|			И НЕ Номенклатура.Комплект
			|
			//строки ТЧ СоставНабора 
			|		ОБЪЕДИНИТЬ ВСЕ
			|
			|		ВЫБРАТЬ
			|		Ссылка,
			|		Номенклатура,
			|		Склад,
			|		СпособСписанияОстаткаТоваров,
			|		Качество,
			|		ХарактеристикаНоменклатуры,
			|		СерияНоменклатуры,
			|		Коэффициент,
			|		ЗаказПокупателя,
			|		Количество
			|		ИЗ
			|			(ВЫБРАТЬ
			|				ДокНаб.Ссылка,
			|				ДокНаб.Номенклатура,
			|               %ПОЛЕ_Набор_Склад% КАК Склад,
			|				%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров% КАК СпособСписанияОстаткаТоваров,   
			|				%ПОЛЕ_Набор_Качество% КАК Качество,                       
			|				ДокНаб.ХарактеристикаНоменклатуры,
			|				ДокНаб.СерияНоменклатуры,
			|				ДокНаб.ЕдиницаИзмерения.Коэффициент КАК Коэффициент,
			|				%ПОЛЕ_Набор_ЗаказПокупателя% КАК ЗаказПокупателя,
			|				ДокНаб.Количество * ДокТов.Количество КАК Количество
			|			ИЗ
			|				Документ." + СтруктураПараметров.ИмяДокумента + ".СоставНабора   КАК ДокНаб
			|				ЛЕВОЕ СОЕДИНЕНИЕ Документ." + СтруктураПараметров.ИмяТаблицы + " КАК ДокТов
			|					ПО ДокТов.КлючСтроки = ДокНаб.КлючСтроки
			|					 И ДокТов.Ссылка     = &ДокументСсылка
			|			ГДЕ
			|				ДокНаб.Ссылка = &ДокументСсылка
			|			) КАК Набор
			|
			|		) 
			|";*/
			}
			/*//Если ЕстьСоставНабора Тогда
*/
			//Запрос = Новый Запрос;
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество,ЕстьСоставНабора",
			Истина,
			ЕстьКачество,
			ЕстьСоставНабора);*/
			if(true/*ЕстьСкладВТабЧасти*/)
			{
				//СтруктураУсловий.Вставить("ПолеСклад", "Склад");
			}
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			//СтруктураУсловий.Вставить("ИспользоватьВременнуюТаблицу", Истина);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			/*// Установим параметры запроса
*/
			//ТоварыВРозницеЗаполнитьОбщиеПараметрыЗапроса(Запрос, СтруктураШапкиДокумента);
			//Запрос.УстановитьПараметр("ПустойЗаказПокупателя", Документы.ЗаказПокупателя.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойСклад",           Справочники.Склады.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойСпособСписания",  Перечисления.СпособыСписанияОстаткаТоваров.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустоеКачество",        Справочники.Качество.ПустаяСсылка());
			/*ТекстЗапроса = УсловияТаблицыОстатков.ВременнаяТаблица + "
	|;
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                                       		КАК Номенклатура,
	|	Док.Номенклатура.Представление                         		КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 		КАК ЕдиницаХраненияОстатковПредставление,
	|   Док.ХарактеристикаНоменклатуры 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(Док.ХарактеристикаНоменклатуры) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   Док.СерияНоменклатуры 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(Док.СерияНоменклатуры) 						КАК СерияНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Склад%                                            КАК Склад, 
	|   %ПОЛЕ_Док_Качество% 										КАК Качество,
	|   СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) 
	|																КАК ДокументКоличество,
	|	ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)     КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)             КАК ОстатокКоличество,
	|	ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)             КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерииКоличество%       						КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0)     КАК КПередачеКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0) КАК КПередачеБезСерииКоличество,
	|	%ПОЛЕ_РезервыПоДокументуКоличество% 						КАК РезервыПоДокументуКоличество,
	|	%ПОЛЕ_РезервыПоДокументуБезСерии_Количество% 				КАК РезервыПоДокументуБезСерииКоличество,
	|	0 															КАК КПолучению,
	|	0                 											КАК КПолучениюПоДокументуКоличество,
	|	0 															КАК КПередачеПоДокументуКоличество,
	|	0              												КАК КПередачеПоДокументуБезСерииКоличество

	|ИЗ 
	|	"+ ТекстЗапросаРеквизитыДокумента + " КАК Док
	|
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	//таблица остатков товаров без учета серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
	|ПО 
	|	Док.Номенклатура = ОстаткиБезСерии.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = ОстаткиБезСерии.ХарактеристикаНоменклатуры", "") + "
	|	//СОЕДИНЕНИЕ_Качество_ОстаткиБезСерии
	|	//СОЕДИНЕНИЕ_Склад_ОстаткиБезСерии
	|
	//таблица товаров в резерве на складе без учета серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)

	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Док.Номенклатура = Резервы.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = Резервы.ХарактеристикаНоменклатуры", "") + "
	|	//СОЕДИНЕНИЕ_ДокументРезерва_Резервы
	|	//СОЕДИНЕНИЕ_Склад_Резервы
	|	//СОЕДИНЕНИЕ_Качество_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|"+?(СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,"
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
	|ПО 
	|	Док.Номенклатура = РезервыПоСерии.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = РезервыПоСерии.ХарактеристикаНоменклатуры", "") + "
	|	" + ?(СтруктураПараметров.ИспользоватьСерииНоменклатуры, "И Док.СерияНоменклатуры = РезервыПоСерии.СерияНоменклатуры", "") + "
	|	//СОЕДИНЕНИЕ_ДокументРезерва_Резервы
	|	//СОЕДИНЕНИЕ_Склад_РезервыПоСерии
	|	//СОЕДИНЕНИЕ_Качество_Резервы

	|","")+"
	|"+?(СтруктураПараметров.ИмяДокумента = "РеализацияТоваровУслуг","
	//таблица резервов по документу: количество, которое списывается за счет резерва (эта часть требуется только для документа Реализация)
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	(ВЫБРАТЬ ТЧ.Номенклатура,
	|	ТЧ.Склад,
	|	ТЧ.ХарактеристикаНоменклатуры
	|	//ПОЛЕ_ТЧ_Серия
	|	//количество, списываемое за счет резерва, не может превышать количество указанное в документе
	|	,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА
	|   	Сумма(ТЧ.ДокументКоличество)
	|	ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
	|	КОНЕЦ КАК КоличествоОстаток
	|	ИЗ
	|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
	|		(ВЫБРАТЬ  
	|			Номенклатура,
	|			Склад,
	|			ЗаказПокупателя,
	|			ХарактеристикаНоменклатуры
	|			//ПОЛЕ_Серия
	|			,СУММА(ВЫРАЗИТЬ(Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) КАК ДокументКоличество
	|		ИЗ 
	|			" + ТекстЗапросаРеквизитыДокумента +" КАК ВремДок
	|		ГДЕ  ВремДок.Ссылка = &ДокументСсылка
	|			И ВремДок.ЗаказПокупателя <> &ПустойЗаказПокупателя и ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва
	|		СГРУППИРОВАТЬ ПО
	|			Номенклатура,
	|			Склад,
	|			ЗаказПокупателя,
	|			ХарактеристикаНоменклатуры
	|			//ПОЛЕ_Серия
	|		) КАК ТЧ
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
	|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
	|		И ТЧ.Склад = ВремРезервы.Склад
	|		И ТЧ.ЗаказПокупателя = ВремРезервы.ДокументРезерва
	|		" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И ТЧ.ХарактеристикаНоменклатуры = ВремРезервы.ХарактеристикаНоменклатуры", "") + "
	|		//СОЕДИНЕНИЕ_Серия_ВремРезервы
	|	СГРУППИРОВАТЬ ПО 
	|		ТЧ.Номенклатура,
	|		ТЧ.Склад,
	|		ТЧ.ХарактеристикаНоменклатуры
	|		//ПОЛЕ_ТЧ_Серия
	|) КАК РезервыПоДокументу
	|ПО 
	|	Док.Номенклатура = РезервыПоДокументу.Номенклатура
	|	И Док.Склад = РезервыПоДокументу.Склад
	|	И Док.ЗаказПокупателя <> &ПустойЗаказПокупателя И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = РезервыПоДокументу.ХарактеристикаНоменклатуры", "") + "
	|	//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу
	
	//таблица резервов по документу без учета серий: количество, которое списывается за счет резерва 
    |//ЗАПРОС_РезервыПоДокументуБезСерии

    |","")+"
	
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО 
	|	Док.Номенклатура                = ТоварыКПередаче.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = ТоварыКПередаче.ХарактеристикаНоменклатуры", "") + "
	|	" + ?(СтруктураПараметров.ИспользоватьСерииНоменклатуры, "И Док.СерияНоменклатуры = ТоварыКПередаче.СерияНоменклатуры", "") + "
	|	//СОЕДИНЕНИЕ_Склад_ТоварыКПередаче
	|	//СОЕДИНЕНИЕ_Качество_ТоварыКПередаче
	
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
	|ПО 
	|	Док.Номенклатура = ТоварыКПередачеБезСерии.Номенклатура
	|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = ТоварыКПередачеБезСерии.ХарактеристикаНоменклатуры", "") + "
	|	//СОЕДИНЕНИЕ_Склад_ТоварыКПередачеБезСерии
	|	//СОЕДИНЕНИЕ_Качество_ТоварыКПередачеБезСерии
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	// остатки по услугам контролировать не надо.
	|	//УСЛОВИЕ_Склад
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   Док.ХарактеристикаНоменклатуры,
	|   Док.СерияНоменклатуры,
	|   %ПОЛЕ_Док_Качество%, 									
	|   %ПОЛЕ_Док_Склад%
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРознице.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|       МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(РезервыПоСерииКоличество), 
	|		Максимум(КПередачеБезСерииКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество),
	|		Максимум(КПолучению), Максимум(КПередачеПоДокументуКоличество), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|   ХарактеристикаНоменклатуры,
	|    Склад
	|	//ПОЛЕ_Качество
	|";*/
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерииКоличество%",	?(СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)","0"));
			//ТекстЗапросаРезервыПоДокументуБезСерии = "";
			if(true/*СтруктураПараметров.ИмяДокумента = "РеализацияТоваровУслуг"*/)
			{
				/*//есть реквизит ЗаказПокупателя, документ может списывать товар из резерва
*/
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*ТекстЗапросаРезервыПоДокументуБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	(ВЫБРАТЬ ТЧ.Номенклатура,
			|	ТЧ.Склад,
			|	ТЧ.ХарактеристикаНоменклатуры
			|	//количество, списываемое за счет резерва, не может превышать количество указанное в документе
			|	,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА
			|   	Сумма(ТЧ.ДокументКоличество)
			|	ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
			|	КОНЕЦ КАК КоличествоОстаток
			|	ИЗ
			|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
			|		(ВЫБРАТЬ  
			|			Номенклатура,
			|			Склад,
			|			ЗаказПокупателя,
			|			ХарактеристикаНоменклатуры
			|			,СУММА(ВЫРАЗИТЬ(Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) КАК ДокументКоличество
			|		ИЗ 
			|			" + ТекстЗапросаРеквизитыДокумента +" КАК ВремДок
			|		ГДЕ  ВремДок.Ссылка = &ДокументСсылка
			|			И ВремДок.ЗаказПокупателя <> &ПустойЗаказПокупателя и ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва
			|		СГРУППИРОВАТЬ ПО
			|			Номенклатура,
			|			Склад,
			|			ЗаказПокупателя,
			|			ХарактеристикаНоменклатуры
			|		) КАК ТЧ
			|	ЛЕВОЕ СОЕДИНЕНИЕ 
			|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
			|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
			|		И ТЧ.Склад = ВремРезервы.Склад
			|		И ТЧ.ЗаказПокупателя = ВремРезервы.ДокументРезерва
			|		" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И ТЧ.ХарактеристикаНоменклатуры = ВремРезервы.ХарактеристикаНоменклатуры", "") + "
			|	СГРУППИРОВАТЬ ПО 
			|		ТЧ.Номенклатура,
			|		ТЧ.Склад,
			|		ТЧ.ХарактеристикаНоменклатуры
			|) КАК РезервыПоДокументуБезСерии
			|ПО 
			|	Док.Номенклатура = РезервыПоДокументуБезСерии.Номенклатура
			|	И Док.Склад = РезервыПоДокументуБезСерии.Склад
			|	И Док.ЗаказПокупателя <> &ПустойЗаказПокупателя И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
			|	" + ?(СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры, "И Док.ХарактеристикаНоменклатуры = РезервыПоДокументуБезСерии.ХарактеристикаНоменклатуры", "");*/
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии",	ТекстЗапросаРезервыПоДокументуБезСерии);
					/*//резервы по документу имеет смысл определять с точностью до серии
*/
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия",							",ТЧ.СерияНоменклатуры");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия",								",СерияНоменклатуры");
					if(true/*СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
					{
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ВремРезервы",			"И (ТЧ.СерияНоменклатуры = ВремРезервы.СерияНоменклатуры ИЛИ НЕ ЕстьNull(ТЧ.ЗаказПокупателя.ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей,ложь))");
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу",	"И Док.СерияНоменклатуры = РезервыПоДокументу.СерияНоменклатуры");
					}
				}
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуКоличество%",		"ЕстьNull(Максимум(РезервыПоДокументу.КоличествоОстаток),0)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_ДокументРезерва_Резервы",		" И (Док.ЗаказПокупателя = &ПустойЗаказПокупателя ИЛИ Док.СпособСписанияОстаткаТоваров <> &ИзРезерва)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ЗаказПокупателя%",					"ЗаказПокупателя");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_ЗаказПокупателя%",				"ДокТов.ЗаказПокупателя");
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%",		?(ТекстЗапросаРезервыПоДокументуБезСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)",	"0"));
			if(true/*ЕстьКачество*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Качество%", "Качество");
				/*ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_Качество%", 	"ВЫБОР КОГДА ДокНаб.Качество = &ПустоеКачество ТОГДА ДокТов.Качество
																			|ИНАЧЕ ДокНаб.Качество КОНЕЦ");*/
			}
			if(true/*ЕстьСпособСписания*/)
			{
				/*ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров%",	"ВЫБОР КОГДА ДокНаб.СпособСписанияОстаткаТоваров = &ПустойСпособСписания ТОГДА ДокТов.СпособСписанияОстаткаТоваров
																								|ИНАЧЕ ДокНаб.СпособСписанияОстаткаТоваров КОНЕЦ");*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_СпособСписанияОстаткаТоваров%",			" СпособСписанияОстаткаТоваров");
			}
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,Истина,,Истина,,ложь,ЕстьКачество,ЕстьСкладВТабЧасти);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыВРозницеОбработатьРезультатЗапроса(Выборка,истина,ТекстЗапросаРезервыПоДокументуБезСерии<>"",СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		//КонтрольОстатков_Реализация_ОтчетОРознПродажах()
		//Процедура контролирует остаток для документов, у которых документ резерва находится в табличной части
		//	Особенность документа:
		//	Наличие документа резерва в табличной части.
		//	В связи с этим документ резерва извлекается из таб части документа и используется соединение
		//	с виртуальными таблицами по документу резерва

		public void ТоварыВРозницеКонтрольОстатков_ЗаказВТабЧасти(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ТекстСерия 			= "СерияНоменклатуры";
			//ТекстХарактеристика = "ХарактеристикаНоменклатуры";
			//ЕстьСерия           = МетаданныеТабЧасти.Реквизиты.Найти(ТекстСерия)                  		<> Неопределено;
			//ЕстьХарактеристика  = МетаданныеТабЧасти.Реквизиты.Найти(ТекстХарактеристика)               <> Неопределено;
			//ЕстьКоэффициент     = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                  	<> Неопределено;
			//ЕстьКачество        = МетаданныеТабЧасти.Реквизиты.Найти("Качество")                  		<> Неопределено;
			//ЕстьСкладВТабличнойЧасти = МетаданныеТабЧасти.Реквизиты.Найти("Склад")                  	<> Неопределено;
			//ЕстьСпособСписания 	=  МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров")	<> Неопределено;
			//ИмяРеквизитаЗаказ = "ЗаказПокупателя";
			if(true/*СтруктураПараметров.ИмяДокумента = "ТребованиеНакладная"*/)
			{
				//ИмяРеквизитаЗаказ = "ЗаказРезерв";
			}
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//ТоварыВРозницеЗаполнитьОбщиеПараметрыЗапроса(Запрос, СтруктураШапкиДокумента);
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(МетаданныеТабЧасти.Реквизиты[ИмяРеквизитаЗаказ].Тип);
			//Запрос.УстановитьПараметр("МассивПустыхЗаказов",МассивПустыхСсылок);
			//ДокументПередачи = "";
			if(true/*СтруктураПараметров.ИмяДокумента = "РасходныйОрдерНаТовары"*/)
			{
				//ДокументПередачи = СтруктураШапкиДокумента.ДокументПередачи;
				//Запрос.УстановитьПараметр("ДокументПередачи",  ДокументПередачи);
			}
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество",
			ЕстьХарактеристика,
			ЕстьКачество);*/
			if(true/*ЕстьСкладВТабличнойЧасти*/)
			{
				//СтруктураУсловий.Вставить("ПолеСклад", "Склад");
			}
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                                       		КАК Номенклатура,
	|	Док.Номенклатура.Представление                         		КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 		КАК ЕдиницаХраненияОстатковПредставление,
	|   %ПОЛЕ_Док_Характеристика% 									КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 					КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 											КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 							КАК СерияНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Склад%                                            КАК Склад, 
	|   %ПОЛЕ_Док_Качество% 										КАК Качество,
	|   %ПОЛЕ_Док_Количество%										КАК ДокументКоличество,
	|	%ПОЛЕ_ОстаткиБезСерии_Количество%     						КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)             КАК ОстатокКоличество,
	|	ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)             КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерии_Количество%      						КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0)     КАК КПередачеКоличество,
	|	%ПОЛЕ_КПередачеБезСерии_Количество% 						КАК КПередачеБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(РезервыПоДокументу.КоличествоОстаток),0) 	КАК РезервыПоДокументуКоличество,
	|	%ПОЛЕ_РезервыПоДокументуБезСерии_Количество% 				КАК РезервыПоДокументуБезСерииКоличество,
	|	%ПОЛЕ_КПередачеПоДокументу_Количество% 						КАК КПередачеПоДокументуКоличество,
	|	%ПОЛЕ_КПередачеПоДокументуБезСерии_Количество%              КАК КПередачеПоДокументуБезСерииКоличество,
	|	0 	 														КАК КПолучению,
	|	0 															КАК КПолучениюПоДокументуКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	
	//таблица остатков товаров без учета серий
	|//ЗАПРОС_ОстаткиБезСерии
	|
	
	//таблица товаров в резерве на складе без учета серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
    |ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Док.Номенклатура = Резервы.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Резервы 
	| 	И (Док.%ПОЛЕ_Заказ% в (&МассивПустыхЗаказов)
	|	//УСЛОВИЕ_Док_СпособСписанияНеРезерв
	|	)
	| 	//СОЕДИНЕНИЕ_Склад_Резервы
	|   //СОЕДИНЕНИЕ_Качество_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|//ЗАПРОС_РезервыПоСерии

	//таблица резервов по документу: количество, которое списывается за счет резерва 
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	(ВЫБРАТЬ ТЧ.Номенклатура
	|	//ПОЛЕ_ТЧ_Склад
	|	//ПОЛЕ_ТЧ_Характеристика
	|	//ПОЛЕ_ТЧ_Серия
	|	//количество, списываемое за счет резерва, не может превышать количество указанное в документе
	|	,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА
	|   	Сумма(ТЧ.ДокументКоличество)
	|	ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
	|	КОНЕЦ КАК КоличествоОстаток
	|	ИЗ
	|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
	|		(ВЫБРАТЬ  
	|			Номенклатура,
	|			%ПОЛЕ_Заказ%
	|			//ПОЛЕ_Характеристика
	|			//ПОЛЕ_Серия
	|			//ПОЛЕ_Склад
	|			,%ПОЛЕ_Количество% КАК ДокументКоличество
	|		ИЗ 
	|			Документ." + СтруктураПараметров.ИмяТаблицы +" КАК ВремДок
	|		ГДЕ  ВремДок.Ссылка = &ДокументСсылка
	|			И ВремДок.%ПОЛЕ_Заказ% НЕ в (&МассивПустыхЗаказов)
	|	//УСЛОВИЕ_ВремДок_СпособСписанияРезерв
	|		СГРУППИРОВАТЬ ПО
	|			Номенклатура,
	|			%ПОЛЕ_Заказ%
	|			//ПОЛЕ_Характеристика
	|			//ПОЛЕ_Серия
	|			//ПОЛЕ_Склад
	|		) КАК ТЧ
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
	|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
	|		И ТЧ.%ПОЛЕ_Заказ% = ВремРезервы.ДокументРезерва
	|		//СОЕДИНЕНИЕ_Характеристика_ВремРезервы
	|		//СОЕДИНЕНИЕ_Серия_ВремРезервы
	|		//СОЕДИНЕНИЕ_Склад_ВремРезервы
	|	СГРУППИРОВАТЬ ПО 
	|		ТЧ.Номенклатура
	|		//ПОЛЕ_ТЧ_Характеристика
	|		//ПОЛЕ_ТЧ_Серия
	|		//ПОЛЕ_ТЧ_Склад
	|) КАК РезервыПоДокументу
	|ПО 
	|Док.Номенклатура                 = РезервыПоДокументу.Номенклатура
	|И Док.%ПОЛЕ_Заказ% НЕ в (&МассивПустыхЗаказов)
	|	//УСЛОВИЕ_Док_СпособСписанияРезерв
	|//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументу
	|//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу
	|//СОЕДИНЕНИЕ_Склад_РезервыПоДокументу

	//таблица резервов по документу без учета серий: количество, которое списывается за счет резерва 
    |//ЗАПРОС_РезервыПоДокументуБезСерии

	//товары к передаче
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО 
	|	Док.Номенклатура = ТоварыКПередаче.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
	|   //СОЕДИНЕНИЕ_Серия_ТоварыКПередаче
	| 	//СОЕДИНЕНИЕ_Качество_ТоварыКПередаче
	| 	//СОЕДИНЕНИЕ_Склад_ТоварыКПередаче
	
	//товары к передаче со складов без учета серий
	|//ЗАПРОС_ТоварыКПередачеБезСерии

	//товары к передаче по документу
	|//ЗАПРОС_КПередачеПоДокументу

	//товары к передаче по документу без учета серий
	|//ЗАПРОС_КПередачеПоДокументуБезСерии
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	// остатки по услугам контролировать не надо.
	|   //УСЛОВИЕ_Склад
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%,
	|   %ПОЛЕ_Док_Качество%, 									
	|   %ПОЛЕ_Док_Склад% 
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРознице.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|         МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(РезервыПоСерииКоличество), 
	|	МАКСИМУМ(КПередачеПоДокументуКоличество), Максимум(КПередачеБезСерииКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество), 
	|	Максимум(КПолучению), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|   ХарактеристикаНоменклатуры
	|   //ПОЛЕ_Склад
	|	//ПОЛЕ_Качество
	|";*/
			//ТекстЗапросаРезервыПоСерии = "";
			//ТекстЗапросаОстаткиБезСерии = "";
			//ТекстЗапросаКПередачеБезСерии = "";
			//ТекстЗапросаКПередачеПоДокументу = "";
			//ТекстЗапросаКПередачеПоДокументуБезСерии = "";
			//ТекстЗапросаРезервыПоДокументуБезСерии = "";
			if(true/*ЕстьСерия*/)
			{
				/*ТекстЗапросаОстаткиБезСерии = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
		|ПО 
		|	Док.Номенклатура = ОстаткиБезСерии.Номенклатура
		| //СОЕДИНЕНИЕ_Характеристика_ОстаткиБезСерии
		| //СОЕДИНЕНИЕ_Качество_ОстаткиБезСерии
		| //СОЕДИНЕНИЕ_Склад_ОстаткиБезСерии";*/
				/*ТекстЗапросаКПередачеБезСерии = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
		|ПО 
		|	Док.Номенклатура = ТоварыКПередачеБезСерии.Номенклатура
		|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередачеБезСерии
		| 	//СОЕДИНЕНИЕ_Качество_ТоварыКПередачеБезСерии
		| 	//СОЕДИНЕНИЕ_Склад_ТоварыКПередачеБезСерии";*/
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*ТекстЗапросаРезервыПоСерии="
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
			|ПО 
			|	Док.Номенклатура = РезервыПоСерии.Номенклатура
			|   //СОЕДИНЕНИЕ_Характеристика_РезервыПоСерии 
			|   //СОЕДИНЕНИЕ_Серия_РезервыПоСерии 
			|   //СОЕДИНЕНИЕ_Склад_РезервыПоСерии
			|	И (Док.%ПОЛЕ_Заказ% в (&МассивПустыхЗаказов)
			|	//УСЛОВИЕ_Док_СпособСписанияНеРезерв
			|	)
			|	//СОЕДИНЕНИЕ_Качество_Резервы
			|";*/
					/*ТекстЗапросаРезервыПоДокументуБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	(ВЫБРАТЬ ТЧ.Номенклатура
			|	//ПОЛЕ_ТЧ_Склад
			|	//ПОЛЕ_ТЧ_Характеристика
			|	//количество, списываемое за счет резерва, не может превышать количество указанное в документе
			|	,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) 
			|		ТОГДА Сумма(ТЧ.ДокументКоличество)
			|		ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
			|	КОНЕЦ КАК КоличествоОстаток
			|	ИЗ
			|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
			|		(ВЫБРАТЬ  
			|			Номенклатура,
			|			%ПОЛЕ_Заказ%
			|			//ПОЛЕ_Характеристика
			|			//ПОЛЕ_Склад
			|			,%ПОЛЕ_Количество% КАК ДокументКоличество
			|		ИЗ 
			|			Документ." + СтруктураПараметров.ИмяТаблицы +" КАК ВремДок
			|		ГДЕ  ВремДок.Ссылка = &ДокументСсылка
			|			И ВремДок.%ПОЛЕ_Заказ% НЕ в (&МассивПустыхЗаказов)
			|			//УСЛОВИЕ_ВремДок_СпособСписанияРезерв
			|		СГРУППИРОВАТЬ ПО
			|			Номенклатура,
			|			%ПОЛЕ_Заказ%
			|			//ПОЛЕ_Характеристика
			|			//ПОЛЕ_Склад
			|		) КАК ТЧ
			|	ЛЕВОЕ СОЕДИНЕНИЕ 
			|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
			|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
			|		И ТЧ.%ПОЛЕ_Заказ% = ВремРезервы.ДокументРезерва
			|		//СОЕДИНЕНИЕ_Характеристика_ВремРезервы
			|		//СОЕДИНЕНИЕ_Склад_ВремРезервы
			|	СГРУППИРОВАТЬ ПО 
			|		ТЧ.Номенклатура
			|		//ПОЛЕ_ТЧ_Характеристика
			|		//ПОЛЕ_ТЧ_Склад
			|) КАК РезервыПоДокументуБезСерии
			|ПО 
			|	Док.Номенклатура = РезервыПоДокументуБезСерии.Номенклатура
			|	И Док.%ПОЛЕ_Заказ% НЕ в (&МассивПустыхЗаказов)
			|	//УСЛОВИЕ_Док_СпособСписанияРезерв
			|	//СОЕДИНЕНИЕ_Характеристика_РезервыПоДокументуБезСерии
			|	//СОЕДИНЕНИЕ_Склад_РезервыПоДокументуБезСерии";*/
				}
			}
			if(true/*СтруктураПараметров.ИмяДокумента = "РасходныйОрдерНаТовары" и ЗначениеЗаполнено(ДокументПередачи)*/)
			{
				/*ТекстЗапросаКПередачеПоДокументу = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + " И ДокументПередачи = &ДокументПередачи ) КАК КПередачеПоДокументу
		|ПО 
		|	Док.Номенклатура = КПередачеПоДокументу.Номенклатура
        |	//СОЕДИНЕНИЕ_Характеристика_КПередачеПоДокументу 
		|	//СОЕДИНЕНИЕ_Серия_КПередачеПоДокументу 
		|	//СОЕДИНЕНИЕ_Склад_КПередачеПоДокументу 
		|	//СОЕДИНЕНИЕ_Качество_КПередачеПоДокументу 
		|";*/
				if(true/*ЕстьСерия*/)
				{
					/*ТекстЗапросаКПередачеПоДокументуБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + " И ДокументПередачи = &ДокументПередачи ) КАК КПередачеПоДокументуБезСерии
			|ПО 
			|	Док.Номенклатура = КПередачеПоДокументуБезСерии.Номенклатура
	        |	//СОЕДИНЕНИЕ_Характеристика_КПередачеПоДокументуБезСерии 
			|	//СОЕДИНЕНИЕ_Склад_КПередачеПоДокументуБезСерии 
			|	//СОЕДИНЕНИЕ_Качество_КПередачеПоДокументуБезСерии
			|";*/
				}
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоСерии",				ТекстЗапросаРезервыПоСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ОстаткиБезСерии",				ТекстЗапросаОстаткиБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_КПередачеПоДокументуБезСерии",ТекстЗапросаКПередачеПоДокументуБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_КПередачеПоДокументу",		ТекстЗапросаКПередачеПоДокументу);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ТоварыКПередачеБезСерии",		ТекстЗапросаКПередачеБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии",	ТекстЗапросаРезервыПоДокументуБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерии_Количество%",				?(ТекстЗапросаРезервыПоСерии<>"",				"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)",			"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ОстаткиБезСерии_Количество%",			?(ТекстЗапросаОстаткиБезСерии<>"",				"ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)",			"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеПоДокументуБезСерии_Количество%",?(ТекстЗапросаКПередачеПоДокументуБезСерии<>"","ЕстьNull(МАКСИМУМ(КПередачеПоДокументуБезСерии.КоличествоОстаток),0)","0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеПоДокументу_Количество%",		?(ТекстЗапросаКПередачеПоДокументу<>"",			"ЕстьNull(МАКСИМУМ(КПередачеПоДокументу.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеБезСерии_Количество%",			?(ТекстЗапросаКПередачеБезСерии<>"",			"ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%",	?(ТекстЗапросаРезервыПоДокументуБезСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Заказ%",				ИмяРеквизитаЗаказ);
			if(true/*ЕстьСерия*/)
			{
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоСерии",	"И Док."+ТекстСерия+" = РезервыПоСерии.СерияНоменклатуры");
					/*//резервы по документу имеет смысл определять с точностью до серии
*/
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия",						",ТЧ."+ТекстСерия);
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия",							","+ТекстСерия);
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ВремРезервы",		"И (ТЧ."+ТекстСерия+" = ВремРезервы.СерияНоменклатуры ИЛИ НЕ ЕстьNull(ВЫРАЗИТЬ(ТЧ."+ИмяРеквизитаЗаказ+" КАК Документ.ЗаказПокупателя).ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей,ложь))");
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу","И Док."+ТекстСерия+" = РезервыПоДокументу."+ТекстСерия);
				}
			}
			/*//Если ЕстьСерия Тогда
*/
			if(true/*ЕстьСпособСписания*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//УСЛОВИЕ_Док_СпособСписанияНеРезерв",		"ИЛИ Док.СпособСписанияОстаткаТоваров <> &ИзРезерва");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//УСЛОВИЕ_Док_СпособСписанияРезерв",		"И Док.СпособСписанияОстаткаТоваров = &ИзРезерва");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//УСЛОВИЕ_ВремДок_СпособСписанияРезерв",	"И ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва");
			}
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,ТекстХарактеристика,ЕстьСерия,ТекстСерия,ЕстьКоэффициент,ЕстьКачество,ЕстьСкладВТабличнойЧасти);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыВРозницеОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ТекстЗапросаРезервыПоДокументуБезСерии<>"",СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		//КонтрольОстатков_СкладВТабЧасти_ЗаказВТабЧасти
		//Процедура контролирует остаток для документов, у которых склад указан в шапке, документ резерва находится в шапке
		//	В связи с этим используется отбор в виртуальных таблицах по документу резерва, указанному в шапке документа

		public void ТоварыВРозницеКонтрольОстатков_СкладВТабЧасти_ЗаказВШапке(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьСпособСписания  = МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров")	<> Неопределено;
			//ЕстьСерия           = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры")               <> Неопределено;
			//ЕстьХарактеристика  = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")      <> Неопределено;
			//ЕстьКоэффициент     = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                  	<> Неопределено;
			//ИмяРеквизитаЗаказ = "Сделка";
			//Заказ = СтруктураШапкиДокумента[ИмяРеквизитаЗаказ];
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//ТоварыВРозницеЗаполнитьОбщиеПараметрыЗапроса(Запрос, СтруктураШапкиДокумента);
			//Запрос.УстановитьПараметр("Заказ",Заказ);
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ПолеСклад,ЕстьХарактеристика",
			"Склад",
			ЕстьХарактеристика);*/
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(СтруктураПараметров.МетаданныеДокумента.Реквизиты[ИмяРеквизитаЗаказ].Тип);
			//Запрос.УстановитьПараметр("МассивПустыхЗаказов",МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                                       	КАК Номенклатура,
	|	Док.Номенклатура.Представление                         	КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 	КАК ЕдиницаХраненияОстатковПредставление,
	|	&Новый 													КАК Качество,
	|   %ПОЛЕ_Док_Характеристика% 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 						КАК СерияНоменклатурыПредставление,
	|   Док.Склад                                              	КАК Склад, 
	|   %ПОЛЕ_Док_Количество% 									КАК ДокументКоличество,
	|	%ПОЛЕ_ОстаткиБезСерии_Количество%            			КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)         КАК ОстатокКоличество,
	|	%ПОЛЕ_Резервы_Количество%                    			КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерии_Количество%                    	КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0) КАК КПередачеКоличество,
	|	%ПОЛЕ_КПередачеБезСерии_Количество% 					КАК КПередачеБезСерииКоличество,
	|	%ПОЛЕ_РезервыПоДокументу_Количество% 					КАК РезервыПоДокументуКоличество,
	|	%ПОЛЕ_РезервыПоДокументуБезСерии_Количество% 			КАК РезервыПоДокументуБезСерииКоличество,
	|	0 														КАК КПолучению,
	|	0                 										КАК КПолучениюПоДокументуКоличество,
	|	0 														КАК КПередачеПоДокументуКоличество,
	|	0              											КАК КПередачеПоДокументуБезСерииКоличество

	
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	//таблица остатков товаров без учета серий
	|//ЗАПРОС_ОстаткиБезСерии
	|
	//таблица товаров в резерве на складе без учета серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|//ЗАПРОС_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|//ЗАПРОС_РезервыПоСерии
	
	//таблица резервов по документу без учета серий: количество, которое списывается за счет резерва 
    |//ЗАПРОС_РезервыПоДокументуБезСерии
	
	//таблица резервов по документу: количество, которое списывается за счет резерва 
	|//ЗАПРОС_РезервыПоДокументу
	
	//товары к передаче со складов
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО 
	|	Док.Номенклатура = ТоварыКПередаче.Номенклатура
	|	И Док.Склад = ТоварыКПередаче.Склад
	|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
	|   //СОЕДИНЕНИЕ_Серия_ТоварыКПередаче

	//товары к передаче со складов без учета серий
	|//ЗАПРОС_ТоварыКПередачеБезСерии

	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	|	И Док.Склад.ВидСклада<>&НТТ И Док.Склад.ВидСклада<>&ВидСклада
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%,
	|	Док.Склад
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРознице.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|         МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(РезервыПоСерииКоличество), 
	|			Максимум(КПередачеБезСерииКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество), Максимум(КПолучению), 
	|			Максимум(КПередачеПоДокументуКоличество), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|	Склад
	|";*/
			//ТекстЗапросаРезервы = "";
			//ТекстЗапросаРезервыПоСерии = "";
			//ТекстЗапросаРезервыПоДокументу = "";
			//ТекстЗапросаОстаткиБезСерии = "";
			//ТекстЗапросаКПередачеБезСерии = "";
			//ТекстЗапросаРезервыПоДокументуБезСерии = "";
			if(true/*НЕ ЗначениеЗаполнено(Заказ)*/)
			{
				/*//За счет резерва остатки не списываются
*/
				/*ТекстЗапросаРезервы = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
		|ПО 
		|	Док.Номенклатура                = Резервы.Номенклатура
		|	И Док.Склад 					= Резервы.Склад
		|   //СОЕДИНЕНИЕ_Характеристика_Резервы ";*/
				if(true/*ЕстьСерия и СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*ТекстЗапросаРезервыПоСерии =" 
				|ЛЕВОЕ СОЕДИНЕНИЕ
				|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
				|ПО 
				|	Док.Номенклатура = РезервыПоСерии.Номенклатура
				|	И Док.Склад = РезервыПоСерии.Склад
				|   //СОЕДИНЕНИЕ_Характеристика_РезервыПоСерии 
				|   //СОЕДИНЕНИЕ_Серия_РезервыПоСерии ";*/
				}
			}
			if(true/*ЕстьСерия*/)
			{
				/*ТекстЗапросаОстаткиБезСерии = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
		|ПО 
		|	Док.Номенклатура = ОстаткиБезСерии.Номенклатура
		|	И Док.Склад = ОстаткиБезСерии.Склад
		|	//СОЕДИНЕНИЕ_Характеристика_ОстаткиБезСерии";*/
				/*ТекстЗапросаКПередачеБезСерии = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
		|ПО
		|	Док.Номенклатура = ТоварыКПередачеБезСерии.Номенклатура
		|	И Док.Склад = ТоварыКПередачеБезСерии.Склад
		|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередачеБезСерии";*/
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоСерии",		ТекстЗапросаРезервыПоСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии",	ТекстЗапросаРезервыПоДокументуБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументу",	ТекстЗапросаРезервыПоДокументу);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_Резервы",				ТекстЗапросаРезервы);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ОстаткиБезСерии",		ТекстЗапросаОстаткиБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ТоварыКПередачеБезСерии",	ТекстЗапросаКПередачеБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерии_Количество%",				?(ТекстЗапросаРезервыПоСерии <> "",				"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументу_Количество%",			?(ТекстЗапросаРезервыПоДокументу <> "",			"ЕстьNull(МАКСИМУМ(РезервыПоДокументу.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Резервы_Количество%",					?(ТекстЗапросаРезервы <> "",					"ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)",				"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ОстаткиБезСерии_Количество%",			?(ТекстЗапросаОстаткиБезСерии <> "",			"ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеБезСерии_Количество%",			?(ТекстЗапросаКПередачеБезСерии<>"",			"ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%",	?(ТекстЗапросаРезервыПоДокументуБезСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)","0"));
			if(true/*ЕстьСерия И СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
			{
				if(true/*ЗначениеЗаполнено(Заказ) И ТипЗнч(Заказ)=Тип("ДокументСсылка.ЗаказПокупателя")*/)
				{
					if(true/*Заказ.ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей*/)
					{
						/*//резервы по документу имеет смысл определять с точностью до серии
*/
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия",							",ТЧ.СерияНоменклатуры");
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия",								",СерияНоменклатуры");
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ВремРезервы",			"И ТЧ.СерияНоменклатуры = ВремРезервы.СерияНоменклатуры ");
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу",	"И Док.СерияНоменклатуры = РезервыПоДокументу.СерияНоменклатуры");
					}
				}
			}
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,,ЕстьСерия,,ЕстьКоэффициент,Ложь,Истина);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыВРозницеОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ТекстЗапросаРезервыПоДокументуБезСерии<>"",СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		//КонтрольОстатков_СкладВТабЧасти_ЗаказВШапке()
		//Процедура контролирует остаток для документов, у которых склад и документ резерва находятся в шапке
		//	В связи с этим используется отбор в виртуальных таблицах по складу и документу резерва, указанным в шапке документа

		public void ТоварыВРозницеКонтрольОстатков_СкладВШапке_ЗаказВШапке(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти<>""*/)
			{
				//ЕстьСпособСписания  = МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров")	<> Неопределено;
				//ЕстьСерия           = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры")               <> Неопределено;
				//ЕстьХарактеристика  = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")      <> Неопределено;
				//ЕстьКоэффициент     = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                  	<> Неопределено;
			}
			//ИмяРеквизитаЗаказ = "Заказ";
			if(true/*СтруктураПараметров.ИмяДокумента = "КомплектацияНоменклатуры"*/)
			{
				//ИмяРеквизитаЗаказ = "ЗаказРезерв";
			}
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ЕстьХарактеристика",
			ЕстьХарактеристика);*/
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			//Заказ = СтруктураШапкиДОкумента[ИмяРеквизитаЗаказ];
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//ТоварыВРозницеЗаполнитьОбщиеПараметрыЗапроса(Запрос, СтруктураШапкиДокумента);
			//Запрос.УстановитьПараметр("Склад", СтруктураШапкиДокумента.Склад);
			//Запрос.УстановитьПараметр("Заказ", Заказ);
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(СтруктураПараметров.МетаданныеДокумента.Реквизиты[ИмяРеквизитаЗаказ].Тип);
			//Запрос.УстановитьПараметр("МассивПустыхЗаказов",МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                                       	КАК Номенклатура,
	|	Док.Номенклатура.Представление                         	КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 	КАК ЕдиницаХраненияОстатковПредставление,
	|	&Новый 													КАК Качество,
	|   %ПОЛЕ_Док_Характеристика% 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 						КАК СерияНоменклатурыПредставление,
	|   &Склад                                              	КАК Склад, 
	|   %ПОЛЕ_Док_Количество% 									КАК ДокументКоличество,
	|	%ПОЛЕ_ОстаткиБезСерии_Количество%            			КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)         КАК ОстатокКоличество,
	|	%ПОЛЕ_Резервы_Количество%                    			КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерии_Количество%                    	КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0) КАК КПередачеКоличество,
	|	%ПОЛЕ_КПередачеБезСерии_Количество% 					КАК КПередачеБезСерииКоличество,
	|	%ПОЛЕ_РезервыПоДокументу_Количество% 					КАК РезервыПоДокументуКоличество,
	|	%ПОЛЕ_РезервыПоДокументуБезСерии_Количество% 			КАК РезервыПоДокументуБезСерииКоличество,
	|	0 														КАК КПолучению,
	|	0                 										КАК КПолучениюПоДокументуКоличество,
	|	0 														КАК КПередачеПоДокументуКоличество,
	|	0              											КАК КПередачеПоДокументуБезСерииКоличество

	
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО 
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	//таблица остатков товаров без учета серий
	|//ЗАПРОС_ОстаткиБезСерии
	|
	//таблица товаров в резерве на складе без учета серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|//ЗАПРОС_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
	|//ЗАПРОС_РезервыПоСерии
	
	//таблица резервов по документу без учета серий: количество, которое списывается за счет резерва 
    |//ЗАПРОС_РезервыПоДокументуБезСерии
	
	//таблица резервов по документу: количество, которое списывается за счет резерва 
	|//ЗАПРОС_РезервыПоДокументу
	
	//товары к передаче со складов
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО 
	|	Док.Номенклатура = ТоварыКПередаче.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
	|   //СОЕДИНЕНИЕ_Серия_ТоварыКПередаче

	//товары к передаче со складов без учета серий
	|//ЗАПРОС_ТоварыКПередачеБезСерии

	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРознице.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|         МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(РезервыПоСерииКоличество), 
	|			Максимум(КПередачеБезСерииКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество), Максимум(КПолучению), 
	|			Максимум(КПередачеПоДокументуКоличество), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%
	|";*/
			//ТекстЗапросаРезервы = "";
			//ТекстЗапросаРезервыПоСерии = "";
			//ТекстЗапросаРезервыПоДокументу = "";
			//ТекстЗапросаОстаткиБезСерии = "";
			//ТекстЗапросаКПередачеБезСерии = "";
			//ТекстЗапросаРезервыПоДокументуБезСерии = "";
			if(true/*НЕ ЗначениеЗаполнено(Заказ) 
		ИЛИ ТипЗнч(Заказ)=Тип("ДокументСсылка.ЗаказПоставщику")*/)
			{
				/*////Заказ поставщику может быть указан в документе ПередачаТоваров при передаче материалов переработчику
*/
				/*//За счет резерва остатки не списываются
*/
				/*ТекстЗапросаРезервы = "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
		|ПО 
		|	Док.Номенклатура = Резервы.Номенклатура
		|   //СОЕДИНЕНИЕ_Характеристика_Резервы ";*/
				if(true/*ЕстьСерия и СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*ТекстЗапросаРезервыПоСерии =" 
				|ЛЕВОЕ СОЕДИНЕНИЕ
				|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
				|ПО 
				|	Док.Номенклатура                = РезервыПоСерии.Номенклатура
				|   //СОЕДИНЕНИЕ_Характеристика_РезервыПоСерии 
				|   //СОЕДИНЕНИЕ_Серия_РезервыПоСерии ";*/
				}
			}
			if(true/*ЕстьСерия*/)
			{
				/*ТекстЗапросаОстаткиБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
			|ПО 
			|	Док.Номенклатура = ОстаткиБезСерии.Номенклатура
			| //СОЕДИНЕНИЕ_Характеристика_ОстаткиБезСерии";*/
				/*ТекстЗапросаКПередачеБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
			|ПО 
			|	Док.Номенклатура = ТоварыКПередачеБезСерии.Номенклатура
			|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередачеБезСерии";*/
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоСерии",		ТекстЗапросаРезервыПоСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии",	ТекстЗапросаРезервыПоДокументуБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументу",	ТекстЗапросаРезервыПоДокументу);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_Резервы",				ТекстЗапросаРезервы);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ОстаткиБезСерии",		ТекстЗапросаОстаткиБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ТоварыКПередачеБезСерии",	ТекстЗапросаКПередачеБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерии_Количество%",				?(ТекстЗапросаРезервыПоСерии <> "",				"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументу_Количество%",			?(ТекстЗапросаРезервыПоДокументу <> "",			"ЕстьNull(МАКСИМУМ(РезервыПоДокументу.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Резервы_Количество%",					?(ТекстЗапросаРезервы <> "",					"ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)",				"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ОстаткиБезСерии_Количество%",			?(ТекстЗапросаОстаткиБезСерии <> "",			"ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)",		"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеБезСерии_Количество%",			?(ТекстЗапросаКПередачеБезСерии<>"",			"ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%",	?(ТекстЗапросаРезервыПоДокументуБезСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)","0"));
			if(true/*ЕстьСерия И СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
			{
				if(true/*ЗначениеЗаполнено(Заказ) И ТипЗнч(Заказ)=Тип("ДокументСсылка.ЗаказПокупателя")*/)
				{
					if(true/*Заказ.ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей*/)
					{
						/*//резервы по документу имеет смысл определять с точностью до серии
*/
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия",							",ТЧ.СерияНоменклатуры");
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия",								",СерияНоменклатуры");
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ВремРезервы",			"И ТЧ.СерияНоменклатуры = ВремРезервы.СерияНоменклатуры ");
						//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу",	"И Док.СерияНоменклатуры = РезервыПоДокументу.СерияНоменклатуры");
					}
				}
			}
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,,ЕстьСерия,,ЕстьКоэффициент,ложь,ложь);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыВРозницеОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ТекстЗапросаРезервыПоДокументуБезСерии<>"",СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		//КонтрольОстатков_СкладВШапке_ЗаказВШапке()
		//Процедура контролирует остаток для документов, у которых склад в шапке, документ резерва не указывается
		//	В связи с этим:
		//	1) Используется отбор в виртуальных таблицах по складу, указанному в шапке документа
		//	2) Не требуется определять количество, которое списывается за счет резерва

		public void ТоварыВРозницеКонтрольОстатков_БезЗаказа(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьСерия           = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры")           <> Неопределено;
			//ЕстьХарактеристика  = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")	<> Неопределено;
			//ЕстьКоэффициент     = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                 <> Неопределено;
			//ЕстьКачество        = МетаданныеТабЧасти.Реквизиты.Найти("Качество")                  	<> Неопределено;
			if(true/*СтруктураПараметров.ИмяДокумента = "КорректировкаСерийИХарактеристикТоваров"*/)
			{
				//ТекстСерия 			= "СерияНоменклатурыСтарая";
				//ТекстХарактеристика = "ХарактеристикаНоменклатурыСтарая";
				//ЕстьСерия           = Истина;
				//ЕстьХарактеристика  = Истина;
			}
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество,ПолеХарактеристика",
			ЕстьХарактеристика,
			ЕстьКачество,
			ТекстХарактеристика);*/
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//ТоварыВРозницеЗаполнитьОбщиеПараметрыЗапроса(Запрос, СтруктураШапкиДокумента);
			//Запрос.УстановитьПараметр("Склад",  СтруктураШапкиДокумента.Склад);
			//Запрос.УстановитьПараметр("ПустойОрдер",         Документы.ПриходныйОрдерНаТовары.ПустаяСсылка());
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура										КАК Номенклатура,
	|	Док.Номенклатура.Представление							КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление	КАК ЕдиницаХраненияОстатковПредставление,
	|	%ПОЛЕ_Док_Качество%										КАК Качество,
	|	%ПОЛЕ_Док_Характеристика%								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%)				КАК ХарактеристикаНоменклатурыПредставление,
	|	%ПОЛЕ_Док_Серия%										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%)						КАК СерияНоменклатурыПредставление,
	|	%ПОЛЕ_Док_Склад%										КАК Склад,
	|	%ПОЛЕ_Док_Количество%									КАК ДокументКоличество,
	|	%ПОЛЕ_ОстаткиБезСерии_Количество%						КАК ОстатокБезСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0)			КАК ОстатокКоличество,
	|	ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0)			КАК РезервыКоличество,
	|	%ПОЛЕ_РезервыПоСерии_Количество%						КАК РезервыПоСерииКоличество,
	|	ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0)	КАК КПередачеКоличество,
	|	%ПОЛЕ_КПередачеБезСерии_Количество% 					КАК КПередачеБезСерииКоличество,
	|	0														КАК КПолучению,
	|	0														КАК КПолучениюПоДокументуКоличество,
	|	0														КАК РезервыПоДокументуКоличество,
	|	0														КАК РезервыПоДокументуБезСерииКоличество,
	|	0														КАК КПередачеПоДокументуКоличество,
	|	0														КАК КПередачеПоДокументуБезСерииКоличество

	|ИЗ
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	//таблица остатков товаров с учетом серий
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
	|ПО
	|	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
	|	И Остатки.Номенклатура = Док.Номенклатура
	|	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	//таблица остатков товаров без учета серий
	|//ЗАПРОС_ОстаткиБезСерии
	|
	//таблица товаров в резерве на складе без учета серий номенклатуры 
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО
	|	Док.Номенклатура = Резервы.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Резервы
	|	//СОЕДИНЕНИЕ_Склад_Резервы
	|	//СОЕДИНЕНИЕ_Качество_Резервы
	
	//таблица товаров в резерве на складе с учетом серий номенклатуры 
	|//ЗАПРОС_РезервыПоСерии
	
	//товары к передаче со складов
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
	|ПО
	|	Док.Номенклатура = ТоварыКПередаче.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
	|	//СОЕДИНЕНИЕ_Качество_ТоварыКПередаче
	|	//СОЕДИНЕНИЕ_Серия_ТоварыКПередаче
	|	//СОЕДИНЕНИЕ_Склад_ТоварыКПередаче

	//товары к передаче со складов без учета серий
	|//ЗАПРОС_ТоварыКПередачеБезСерии
	
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Не Док.Номенклатура.Комплект
	|	И Не Док.Номенклатура.Услуга 
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|	%ПОЛЕ_Док_Характеристика%,
	|	%ПОЛЕ_Док_Серия%,
	|	%ПОЛЕ_Док_Качество%,
	|	%ПОЛЕ_Док_Склад%
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРознице.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество),
	|		МАКСИМУМ(КПередачеКоличество), Максимум(РезервыПоСерииКоличество), Максимум(КПередачеБезСерииКоличество),
	|		МАКСИМУМ(КПолучению), МАКСИМУМ(РезервыПоДокументуКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество),
	|		Максимум(КПередачеПоДокументуКоличество), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество)
	|ПО Номенклатура,
	|	%ПОЛЕ_Док_Характеристика%, %ПОЛЕ_Док_Склад%
	|	//ПОЛЕ_Качество
	|";*/
			//ТекстЗапросаРезервыПоСерии = "";
			//ТекстЗапросаОстаткиБезСерии = "";
			//ТекстЗапросаКПередачеБезСерии = "";
			if(true/*ЕстьСерия*/)
			{
				if(true/*СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
				{
					/*ТекстЗапросаРезервыПоСерии =" 
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСерии
			|ПО 
			|	Док.Номенклатура = РезервыПоСерии.Номенклатура
			|   //СОЕДИНЕНИЕ_Характеристика_РезервыПоСерии
			|   //СОЕДИНЕНИЕ_Склад_РезервыПоСерии
			|   //СОЕДИНЕНИЕ_Качество_Резервы
			|   //СОЕДИНЕНИЕ_Серия_РезервыПоСерии ";*/
				}
				/*ТекстЗапросаОстаткиБезСерии = "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ОстаткиБезСерии
			|ПО 
			|	Док.Номенклатура = ОстаткиБезСерии.Номенклатура
			| 	//СОЕДИНЕНИЕ_Качество_ОстаткиБезСерии
			| 	//СОЕДИНЕНИЕ_Склад_ОстаткиБезСерии
			| //СОЕДИНЕНИЕ_Характеристика_ОстаткиБезСерии";*/
				/*ТекстЗапросаКПередачеБезСерии = "	
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередачеБезСерии
		|ПО 
		|	Док.Номенклатура = ТоварыКПередачеБезСерии.Номенклатура
		|   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередачеБезСерии
		|   //СОЕДИНЕНИЕ_Склад_ТоварыКПередачеБезСерии
		| 	//СОЕДИНЕНИЕ_Качество_ТоварыКПередачеБезСерии";*/
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоСерии",	ТекстЗапросаРезервыПоСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ОстаткиБезСерии",	ТекстЗапросаОстаткиБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_ТоварыКПередачеБезСерии",	ТекстЗапросаКПередачеБезСерии);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерии_Количество%",	?(ТекстЗапросаРезервыПоСерии<>"",	"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ОстаткиБезСерии_Количество%",?(ТекстЗапросаОстаткиБезСерии<>"",	"ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0)",	"0"));
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_КПередачеБезСерии_Количество%",	?(ТекстЗапросаКПередачеБезСерии<>"",	"ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0)",	"0"));
			//ДополнитьТекстЗапроса(ТекстЗапроса,СтруктураПараметров,ЕстьХарактеристика,ТекстХарактеристика,ЕстьСерия,ТекстСерия,ЕстьКоэффициент,ЕстьКачество,ложь);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ТоварыВРозницеОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ложь,СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ);
		}
		//Вспомогательная процедура для установки некоторых общих для многих процедур параметров запроса

		public void ТоварыВРозницеЗаполнитьОбщиеПараметрыЗапроса(/*Запрос, СтруктураШапкиДокумента*/)
		{
			//Запрос.УстановитьПараметр("ДокументСсылка",			СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("Новый",          		Справочники.Качество.Новый);
			//Запрос.УстановитьПараметр("ПустаяХарактеристика",  	Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяСерия",  			Справочники.СерииНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ИзРезерва",      		Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва);
			//Запрос.УстановитьПараметр("НТТ",                   	Перечисления.ВидыСкладов.НТТ);
			//Запрос.УстановитьПараметр("ВидСклада",              Перечисления.ВидыСкладов.Оптовый);
		}

		public void ТоварыВРозницеОбработатьРезультатЗапроса(/*Выборка,ЕстьСерия,ЕстьРезервыПоДокументуБезСерии,ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,Заголовок,Отказ*/)
		{
			while(true/*Выборка.Следующий()*/)
			{
				if(true/*Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке*/)
				{
					//ДокументКоличествоБезСерии = Выборка.ДокументКоличество;
					//РезервыПоДокументуБезСерииКоличество   = ?(ЕстьРезервыПоДокументуБезСерии,Выборка.РезервыПоДокументуБезСерииКоличество,Выборка.РезервыПоДокументуКоличество);
				}
				//ДокументКоличество             = Выборка.ДокументКоличество;
				//КоличествоНаСкладе             = Выборка.ОстатокКоличество;
				//КоличествоВРезерве             = Выборка.РезервыКоличество;
				//КоличествоВРезервеПоСерии      = Выборка.РезервыПоСерииКоличество;
				//РезервыПоДокументуКоличество   = Выборка.РезервыПоДокументуКоличество;
				//КПередачеКоличество            = Выборка.КПередачеКоличество;
				//КПередачеБезСерииКоличество    = ?(ЕстьСерия,Выборка.КПередачеБезСерииКоличество,КПередачеКоличество);
				//КПередачеПоДокументуКоличество = Выборка.КПередачеПоДокументуКоличество;
				//КПередачеПоДокументуБезСерииКоличество = ?(ЕстьСерия,Выборка.КПередачеПоДокументуБезСерииКоличество,Выборка.КПередачеПоДокументуКоличество);
				//КПолучениюКоличество           = Выборка.КПолучению;
				//КПолучениюПоДокументуКоличество = Выборка.КПолучениюПоДокументуКоличество;
				/*НедоступноНаСкладе = Макс(КоличествоВРезерве - РезервыПоДокументуБезСерииКоличество,0)
			+ Макс(КПередачеБезСерииКоличество - КПередачеПоДокументуБезСерииКоличество,0)
			+ Макс(КПолучениюКоличество - КПолучениюПоДокументуКоличество,0);*/
				/*// Сначала проверяем остаток товара на складе с учетом серий,
*/
				/*// потом свободный остаток товара (без учета серий)
*/
				if(true/*ЕстьСерия*/)
				{
					//КоличествоБезРезерва = КоличествоНаСкладе;
					//мКоличествоВРезерве = 0;
					/*//если серия не заполнена - уменьшать свободный остаток на количество резерва и товаров к передаче нельзя, 
*/
					/*//	т.к. может попасть резервирование или товары к передаче, выполненные без учета серии 
*/
					if(true/*ЗначениеЗаполнено(Выборка.СерияНоменклатуры)*/)
					{
						if(true/*ИспользоватьУказаниеСерийНоменклатурыПриРезервировании*/)
						{
							/*//может иметься резерв в разрезе серий - его надо убрать из свободного остатка
*/
							//мКоличествоВРезерве = Макс(КоличествоВРезервеПоСерии - РезервыПоДокументуКоличество,0);
							//КоличествоБезРезерва = КоличествоНаСкладе - мКоличествоВРезерве;
						}
						//КоличествоБезРезерва = КоличествоБезРезерва - КПередачеКОличество + КПередачеПоДокументуКоличество;
					}
					if(true/*КоличествоБезРезерва < ДокументКоличество*/)
					{
						/*// Требуемое количество товара
*/
						/*// Свободное количество товара
*/
						/*// Количество в резерве
*/
						/*// Склад (представление)
*/
						/*// Заказ поставщику (представление)
*/
						/*// Номенклатура (представление)
*/
						/*// Характеристика (представление)
*/
						/*// Серия номенклатуры (представление)
*/
						/*// Качество товара (представление)
*/
						/*// Единица хранения остатков (представление)
*/
						//);
					}
					//КоличествоНаСкладе = Выборка.ОстатокБезСерииКоличество;
					//ДокументКоличество = ДокументКоличествоБезСерии;
				}
				if(true/*КоличествоНаСкладе - НедоступноНаСкладе < ДокументКоличество*/)
				{
					/*// Требуемое количество товара
*/
					/*// Свободное количество товара
*/
					/*// Количество товара в резерве
*/
					/*// Количество товара к передаче
*/
					/*// Склад (представление)
*/
					/*// Заказ поставщику (представление)
*/
					/*// Номенклатура (представление)
*/
					/*// Характеристика (представление)
*/
					/*// Серия номенклатуры (представление)
*/
					/*// Качество товара (представление)
*/
					/*// Единица хранения остатков (представление)
*/
					//);
					//ДокументКоличествоБезСерии = 0;
				}
			}
			//;;
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ТоварыВРезервеНаСкладах
		// Процедура контролирует остаток по переданному документу и его табличной части.
		// В случае недостатка товаров выставляется флаг отказа и выдается сообщение.
		//
		// Параметры:
		//  ИмяТабличнойЧасти			- строка, имя табличной части, которая проводится по регистру
		//  СтруктураШапкиДокумента		- структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа
		//  ОтказПроведения				- флаг отказа в проведении
		//  ЗаголовокСообщения			- строка, заголовок сообщения об ошибке проведения
		//	РежимПроведения				- РежимПроведенияДокумента
		//

		public void ТоварыВРезервеНаСкладахКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			//Отказ     = ОтказПроведения;
			//Заголовок = ЗаголовокСообщения;
			if(true/*СтруктураШапкиДокумента.Свойство("ДокументСсылка")*/)
			{
				/*// Некоторые документы формируют структуру шапки по другому объекту,
*/
				/*// например, документ "Корректировка заказа покупателя"
*/
				//ДокументСсылка = СтруктураШапкиДокумента.ДокументСсылка;
			}
			//МетаданныеДокумента = ДокументСсылка.Метаданные();
			//ИмяДокумента        = МетаданныеДокумента.Имя;
			//ИмяТаблицы          = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			//ИспользоватьУказаниеСерийНоменклатурыПриРезервировании = Ложь;
			if(true/*НЕ СтруктураШапкиДокумента.Свойство("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании", ИспользоватьУказаниеСерийНоменклатурыПриРезервировании)*/)
			{
				//ИспользоватьУказаниеСерийНоменклатурыПриРезервировании = глЗначениеПеременной("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании");
			}
			//ИспользоватьХарактеристикиНоменклатуры = глЗначениеПеременной("ИспользоватьХарактеристикиНоменклатуры");
			//ИспользоватьСерииНоменклатуры          = глЗначениеПеременной("ИспользоватьСерииНоменклатуры");
			//СтруктураПараметров = Новый Структура;
			//СтруктураПараметров.Вставить("ДокументСсылка",	    ДокументСсылка);
			//СтруктураПараметров.Вставить("МетаданныеДокумента",	МетаданныеДокумента);
			//СтруктураПараметров.Вставить("ИмяДокумента", 		ИмяДокумента);
			//СтруктураПараметров.Вставить("ИмяТабличнойЧасти", 	ИмяТабличнойЧасти);
			//СтруктураПараметров.Вставить("ИмяТаблицы", 			ИмяТаблицы);
			//СтруктураПараметров.Вставить("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании",	ИспользоватьУказаниеСерийНоменклатурыПриРезервировании);
			//СтруктураПараметров.Вставить("ИспользоватьХарактеристикиНоменклатуры",					ИспользоватьХарактеристикиНоменклатуры);
			//СтруктураПараметров.Вставить("ИспользоватьСерииНоменклатуры",							ИспользоватьСерииНоменклатуры);
			if(true/*СтруктураПараметров.ИмяДокумента = "РеализацияТоваровУслуг"*/)
			{
				/*//контроль достаточности остатков в резерве для снятия резерва по заказу
*/
				//ТоварыВРезервеНаСкладахКонтрольОстатков_Реализация(СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ);
			}
			/*//вернем обратно признак отказа от проведения документа 
*/
			//ОтказПроведения    = Отказ;
			//ЗаголовокСообщения = Заголовок;
		}
		// ТоварыВРезервеНаСкладахКонтрольОстатков()
		//Процедура контролирует остаток по данному регистру для документа РеализацияТоваровИУслуг
		//Особенность документа - наличие дополнительной табличной части "Состав набора", в которой может быть списание состава набора из резерва по заказу.
		//	В этом случае необходимо контролировать также остатки по резервам для состава набора.

		public void ТоварыВРезервеНаСкладахКонтрольОстатков_Реализация(/*СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ*/)
		{
			//ЕстьСоставНабора = (СтруктураПараметров.ИмяТабличнойЧасти = "Товары");
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				//ЕстьХарактеристика  = Ложь;
				//ЕстьСерия           = Ложь;
				//ЕстьКачество		= Ложь;
			}
			if(true/*ЕстьСоставНабора*/)
			{
				/*ТекстЗапросаРеквизитыДокумента = "
			|	(ВЫБРАТЬ
			//Строки ТЧ Товары, в которых номенклатура - не комплект
			|			Док.Ссылка,
			|			Док.Номенклатура,
			|			Док.Склад,
			|			Док.СпособСписанияОстаткаТоваров,
			|			Док.ХарактеристикаНоменклатуры,
			|			Док.СерияНоменклатуры,
			|			Док.Коэффициент,
			|			Док.ЗаказПокупателя,
			|			Док.ЕдиницаИзмерения,
			|			Док.Количество
			|		ИЗ
			|			Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
			|		ГДЕ
			|			Док.Ссылка = &ДокументСсылка
			|			И НЕ Док.Номенклатура.Комплект
			|           И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
			|		ОБЪЕДИНИТЬ ВСЕ
			|
			//Строки ТЧ Состав набора
			|		ВЫБРАТЬ
			|			Док.Ссылка,
			|			Док.Номенклатура,
			|			Док.Склад,
			|			Док.СпособСписанияОстаткаТоваров,
			|			Док.ХарактеристикаНоменклатуры,
			|			Док.СерияНоменклатуры,
			|			Док.Коэффициент,
			|			Док.ЗаказПокупателя,
			|			Док.ЕдиницаИзмерения,
			|			Док.Количество
			|		ИЗ
			|			(ВЫБРАТЬ
			|				ДокНаб.Ссылка,
			|				ДокНаб.Номенклатура,
			//Склад может быть указан в целом для набора в строке ТЧ Товары, или для каждого элемента набора в ТЧ СоставНабора
			|				ВЫБОР
			|					КОГДА ДокНаб.Склад = &ПустойСклад ТОГДА ДокТов.Склад
			|					ИНАЧЕ ДокНаб.Склад
			|				КОНЕЦ КАК Склад,
			//СпособСписанияОстатков может быть указан в целом для набора в строке ТЧ Товары, или для каждого элемента набора в ТЧ СоставНабора
			|				ВЫБОР
			|					КОГДА ДокНаб.СпособСписанияОстаткаТоваров = &ПустойСпособСписания ТОГДА ДокТов.СпособСписанияОстаткаТоваров
			|					ИНАЧЕ ДокНаб.СпособСписанияОстаткаТоваров
			|				КОНЕЦ КАК СпособСписанияОстаткаТоваров,
			|				ДокНаб.ХарактеристикаНоменклатуры,
			|				ДокНаб.СерияНоменклатуры,
			|				ДокНаб.ЕдиницаИзмерения.Коэффициент КАК Коэффициент,
			|				ДокТов.ЗаказПокупателя,
			|				ДокТов.ЕдиницаИзмерения,
			|				ДокНаб.Количество * ДокТов.Количество КАК Количество
			|			ИЗ
			|				Документ." + СтруктураПараметров.ИмяДокумента + ".СоставНабора   КАК ДокНаб
			|				ЛЕВОЕ СОЕДИНЕНИЕ Документ." + СтруктураПараметров.ИмяТаблицы + " КАК ДокТов
			|					ПО ДокТов.КлючСтроки = ДокНаб.КлючСтроки
			|					 И ДокТов.Ссылка     = &ДокументСсылка
			|			ГДЕ
			|				ДокНаб.Ссылка = &ДокументСсылка
			|
			|			) КАК Док
			|       ГДЕ Док.СпособСписанияОстаткаТоваров = &ИзРезерва
			|		) КАК Док
			|";*/
			}
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*ПараметрыУсловий = Новый Структура(
			"ПолеСклад,ЕстьХарактеристика,ЕстьКачество,ЕстьСоставНабора,РеквизитДокументРезерва,ДопУсловияТабличнойЧасти",
			"Склад",
			ЕстьХарактеристика,
			ЕстьКачество,
			ЕстьСоставНабора,
			"ЗаказПокупателя",
			" И Док.СпособСписанияОстаткаТоваров = &ИзРезерва И (НЕ Док.ЗаказПокупателя В (&МассивПустыхСсылок))");*/
			//ПараметрыУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Резерв"),
			ПараметрыУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",        СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ИзРезерва",             Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва);
			//Запрос.УстановитьПараметр("ПустойСпособСписания",  Перечисления.СпособыСписанияОстаткаТоваров.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойСклад",  		   Справочники.Склады.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяХарактеристика",  Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяСерия",  		   Справочники.СерииНоменклатуры.ПустаяСсылка());
			//МассивПустыхСсылок = Новый Массив;
			//МассивПустыхСсылок.Добавить(Неопределено);
			//МассивПустыхСсылок.Добавить(Документы.ЗаказПокупателя.ПустаяСсылка());
			//Запрос.УстановитьПараметр("МассивПустыхСсылок", МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура 										КАК Номенклатура,
	|	Док.Номенклатура.Представление               			КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление  КАК ЕдиницаХраненияОстатковПредставление,
	|   %ПОЛЕ_Док_Характеристика% 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 						КАК СерияНоменклатурыПредставление,
	|	Док.ЗаказПокупателя 									КАК ДокументРезерва,
	|   Док.Склад               								КАК Склад,
	|   %ПОЛЕ_Док_Количество% 									КАК ДокументКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) 		КАК РезервыКоличество
	|ИЗ 
	|	"+ ТекстЗапросаРеквизитыДокумента + "
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(," + УсловияТаблицыОстатков.Резерв + ") КАК Резервы
	|ПО 
	|	Резервы.Склад = Док.Склад
	|	И Резервы.Номенклатура = Док.Номенклатура
	|	И Резервы.ДокументРезерва = Док.ЗаказПокупателя
	|   И Резервы.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|   И Резервы.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|ГДЕ
	|	Не Док.Номенклатура.Комплект
	|	И Док.Ссылка  =  &ДокументСсылка
	| 	И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
	|	И (НЕ Док.ЗаказПокупателя В (&МассивПустыхСсылок))
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%,
	|	Док.ЗаказПокупателя,
	|	Док.Склад
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			//УчитыватьСерии = ложь;
			/*//По умолчанию отбор по пустой характеристике
*/
			//СОЕДИНЕНИЕ_Характеристика_Остатки = "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)";
			/*//По умолчанию отбор по пустой серии, т.к. для тары и договоров без ОУ резервы выполняются без серии
*/
			//СОЕДИНЕНИЕ_Серия_Остатки = "ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				/*//нет серии, характеристики, единицы измерения и коэффициента
*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Количество%","Сумма(Док.Количество)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Характеристика%","&ПустаяХарактеристика");
			}
			if(true/*не УчитыватьСерии*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Серия%","&ПустаяСерия");
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Характеристика_Остатки%", СОЕДИНЕНИЕ_Характеристика_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Серия_Остатки%", СОЕДИНЕНИЕ_Серия_Остатки);
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ Склад, Номенклатура, ЗаказПокупателя" + ?(ЕстьХарактеристика, ", ХарактеристикаНоменклатуры", "") + "
			|ИЗ " + ТекстЗапросаРеквизитыДокумента + "
			|ГДЕ
			|	Не Док.Номенклатура.Комплект
			|	И Док.Ссылка  =  &ДокументСсылка
			| 	И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
			|	И (НЕ Док.ЗаказПокупателя В (&МассивПустыхСсылок))";*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыВРезервеНаСкладах"
				,РезультатЗапросаДляБлокировки);*/
					/*СтруктураИсточникаДанных = Новый Структура(
				"Склад,Номенклатура,ДокументРезерва"
				,"Склад"
				,"Номенклатура"
				,"ЗаказПокупателя");*/
					if(true/*ЕстьХарактеристика  И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,,СтруктураИсточникаДанных, Отказ, Заголовок);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			if(true/*РезультатЗапроса.Пустой()*/)
			{
			}
			//Выборка = РезультатЗапроса.Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "Остатка резерва " + 
		УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
								  ?(СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара", " "+Выборка.ХарактеристикаНоменклатурыПредставление, ""),
								  ?(УчитыватьСерии, " "+Выборка.СерияНоменклатурыПредставление, "")) +
		" на складе """ + СокрЛП(Выборка.Склад) + """ по документу """ + СокрЛП(Выборка.ДокументРезерва) + 
		""" недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.РезервыКоличество, Выборка.ДокументКоличество,
		Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		//КонтрольОстатков_Реализация()
		//Процедура контролирует остаток по данному регистру для документов, у которых склад и документ резерва находятся в табличной части
		//	Особенность документа:
		//	Наличие склада и документа резерва в табличной части.
		//	В связи с этим склад и документ резерва извлекаются из таб части документа и используется соединение
		//	с виртуальной таблицей ТоварыВРезерве по складу и документу резерва

		public void ТоварыВРезервеНаСкладахКонтрольОстатков_СкладВТабЧасти_ЗаказВТабЧасти(/*СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ*/)
		{
			//ИмяДокументРезерва  = "Заказ";
			if(true/*СтруктураПараметров.ИмяДокумента = "ТребованиеНакладная"*/)
			{
				//ИмяДокументРезерва  = "ЗаказРезерв";
			}
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				//ЕстьХарактеристика  = Ложь;
				//ЕстьСерия           = Ложь;
			}
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*ПараметрыУсловий = Новый Структура(
			"ПолеСклад,ЕстьХарактеристика,РеквизитДокументРезерва,ДопУсловияТабличнойЧасти",
			"Склад",
			ЕстьХарактеристика,
			ИмяДокументРезерва,
			?(СтруктураПараметров.ИмяДокумента = "АвансовыйОтчет"," И " + ИмяДокументРезерва + ".БезПраваПродажи"," И НЕ Док." + ИмяДокументРезерва + " В (&МассивПустыхСсылок)"));*/
			//ПараметрыУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Резерв"),
			ПараметрыУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",        СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ПустойЗаказПокупателя", Документы.ЗаказПокупателя.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяХарактеристика",  Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяСерия",  		   Справочники.СерииНоменклатуры.ПустаяСсылка());
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(СтруктураПараметров.МетаданныеДокумента.ТабличныеЧасти[СтруктураПараметров.ИмяТабличнойЧасти].Реквизиты[ИмяДокументРезерва].Тип);
			//Запрос.УстановитьПараметр("МассивПустыхСсылок", МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура 											КАК Номенклатура,
	|	Док.Номенклатура.Представление               				КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление      КАК ЕдиницаХраненияОстатковПредставление,
	|   %ПОЛЕ_Док_Характеристика% 									КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 					КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 											КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 							КАК СерияНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Количество% 										КАК ДокументКоличество,
	|	Док." + ИмяДокументРезерва + "								КАК ДокументРезерва,
	|   Док.Склад               									КАК Склад,
	|	ЕСТЬNULL(Максимум(Резервы.КоличествоОстаток), 0) 			КАК РезервыКоличество
	|
	|ИЗ  Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(," + УсловияТаблицыОстатков.Резерв + ") КАК Резервы
	|ПО 
	|	Резервы.Склад = Док.Склад
	|	И Резервы.Номенклатура = Док.Номенклатура
	| 	И Резервы.ДокументРезерва = Док." + ИмяДокументРезерва + "
	|	И Резервы.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|   %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ГДЕ
	|	НЕ Док.Номенклатура.Комплект
	|	И Док.Ссылка  =  &ДокументСсылка
	|	" + ?(СтруктураПараметров.ИмяДокумента = "АвансовыйОтчет"," И " + ИмяДокументРезерва + ".БезПраваПродажи","И НЕ Док." + ИмяДокументРезерва + " В (&МассивПустыхСсылок)") + "
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%,
	|	//Сгруппировать_Серия
	|	Док." + ИмяДокументРезерва + ",
	|	Док.Склад
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			//УчитыватьСерии = ложь;
			//СОЕДИНЕНИЕ_Характеристика_Остатки = "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)";
			//СОЕДИНЕНИЕ_Серия_Остатки = "И Резервы.СерияНоменклатуры = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				/*//нет серии, характеристики, единицы измерения и коэффициента
*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Количество%","Сумма(Док.Количество)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Характеристика%","&ПустаяХарактеристика");
			}
			if(true/*НЕ УчитыватьСерии*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Серия%","&ПустаяСерия");
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Характеристика_Остатки%", СОЕДИНЕНИЕ_Характеристика_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Серия_Остатки%", СОЕДИНЕНИЕ_Серия_Остатки);
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ Склад, Номенклатура," + ИмяДокументРезерва + ?(ЕстьХарактеристика, ", ХарактеристикаНоменклатуры", "") + "
			|ИЗ Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
			|ГДЕ
			|	Не Док.Номенклатура.Комплект
			|	И Док.Ссылка  =  &ДокументСсылка
			|	"+?(СтруктураПараметров.ИмяДокумента = "АвансовыйОтчет"," И "+ИмяДокументРезерва+".БезПраваПродажи","И НЕ Док." + ИмяДокументРезерва + " В (&МассивПустыхСсылок)");*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыВРезервеНаСкладах"
				,РезультатЗапросаДляБлокировки);*/
					/*СтруктураИсточникаДанных = Новый Структура(
				"Склад,Номенклатура,ДокументРезерва"
				,"Склад"
				,"Номенклатура"
				,ИмяДокументРезерва);*/
					if(true/*ЕстьХарактеристика И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,,СтруктураИсточникаДанных, Отказ, Заголовок);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			if(true/*РезультатЗапроса.Пустой()*/)
			{
			}
			//Выборка = РезультатЗапроса.Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "Остатка резерва " + 
		УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
								  ?(СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара", " "+Выборка.ХарактеристикаНоменклатурыПредставление, ""),
								  ?(УчитыватьСерии, " "+Выборка.СерияНоменклатурыПредставление, "")) +
		" на складе """ + СокрЛП(Выборка.Склад) + """ по документу """ + СокрЛП(Выборка.ДокументРезерва) + 
		""" недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.РезервыКоличество, Выборка.ДокументКоличество,
		Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		//КонтрольОстатков_ВозвратТоваровПоставщику()
		//Процедура контролирует остаток по данному регистру для документов, у которых склад в таб части, а документ резерва (заказ) - в шапке
		//	В связи с этим:
		//	1) Склад извлекается из таб части документа и используется соединение с виртуальной таблицей ТоварыВРезерве по складу
		//	2) Используется отбор в виртуальной таблица ТоварыВРезерве по документу резерва, указанному в шапке документа

		public void ТоварыВРезервеНаСкладахКонтрольОстатков_СкладВТабЧасти_ЗаказВШапке(/*СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ*/)
		{
			//ЗнакКоличества = "";
			//ДопУсловияТабличнойЧасти = "";
			if(true/*СтруктураПараметров.ИмяДокумента = "АвансовыйОтчет"*/)
			{
				//ИмяСкладТабличнойЧасти = "Склад";
				//ДокументРезерва        = СтруктураШапкиДокумента.СкладОрдер;
			}
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				/*СтруктураУсловий = Новый Структура("ПолеСклад,ДопУсловияТабличнойЧасти",
				ИмяСкладТабличнойЧасти,
				" И %ПОЛЕ_Док_Склад% ССЫЛКА Справочник.Склады И %ПОЛЕ_Док_Склад%<>&ПустойСклад");*/
			}
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Резерв"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",        	СтруктураПараметров.ДокументСсылка);
			//Запрос.УстановитьПараметр("ПустойСклад",         	Справочники.Склады.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ДокументРезерва", 		ДокументРезерва);
			//Запрос.УстановитьПараметр("ПустаяХарактеристика",  	Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяСерия",  		   	Справочники.СерииНоменклатуры.ПустаяСсылка());
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура 										КАК Номенклатура,
	|	Док.Номенклатура.Представление               			КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление  КАК ЕдиницаХраненияОстатковПредставление,
	|   %ПОЛЕ_Док_Характеристика% 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 						КАК СерияНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Количество% 									КАК ДокументКоличество,
	|   &ДокументРезерва                             			КАК ДокументРезерва,
	|   %ПОЛЕ_Док_Склад%               							КАК Склад,
	|	ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) 		КАК РезервыКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	// Для возвратной тары не указываем условия в виртуальной таблице, 
	|	// т.к. используются оперативные остатки и все измерения
	|	// Это позволит уменьшить время выполнения запроса
	|	// В остальных случаях необходимо указывать условия
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки " + ?(СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара", "", "(, ДокументРезерва = &ДокументРезерва И " + УсловияТаблицыОстатков.Резерв + ")") + " КАК Резервы
	|ПО 
	| 	Резервы.Склад = %ПОЛЕ_Док_Склад%
	|	И Резервы.Номенклатура = Док.Номенклатура
	|   И Резервы.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И Резервы.ДокументРезерва = &ДокументРезерва
	|   %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ГДЕ
	|	Не Док.Номенклатура.Комплект
	|	И Док.Ссылка  =  &ДокументСсылка
	|	И %ПОЛЕ_Док_Склад%  ССЫЛКА Справочник.Склады 
	|	И %ПОЛЕ_Док_Склад%<>&ПустойСклад
	|	" + ДопУсловияТабличнойЧасти + "
	|
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%,
	|	%ПОЛЕ_Док_Склад%
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			//УчитыватьСерии = Ложь;
			//СОЕДИНЕНИЕ_Характеристика_Остатки = "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)";
			//СОЕДИНЕНИЕ_Серия_Остатки = "";
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				/*//нет серии, характеристики, единицы измерения и коэффициента
*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Количество%","Сумма(" + ЗнакКоличества + "Док.Количество)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Характеристика%","&ПустаяХарактеристика");
				//СОЕДИНЕНИЕ_Серия_Остатки = "И Резервы.СерияНоменклатуры = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%СОЕДИНЕНИЕ_Характеристика_Остатки%", СОЕДИНЕНИЕ_Характеристика_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%СОЕДИНЕНИЕ_Серия_Остатки%", СОЕДИНЕНИЕ_Серия_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Склад%", "Док." + ИмяСкладТабличнойЧасти);
			if(true/*НЕ УчитыватьСерии*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Серия%", "&ПустаяСерия");
			}
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ Номенклатура
			|, Док." + ИмяСкладТабличнойЧасти + " КАК Склад"
			+ ?(СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара", ", ХарактеристикаНоменклатуры", "") + "
			|ИЗ Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
			|ГДЕ
			|	НЕ Док.Номенклатура.Комплект
			|	И Док.Ссылка  =  &ДокументСсылка
			|	И Док." + ИмяСкладТабличнойЧасти + " ССЫЛКА Справочник.Склады 
			|	И Док." + ИмяСкладТабличнойЧасти + " <> &ПустойСклад
			|	" + ДопУсловияТабличнойЧасти;*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыВРезервеНаСкладах"
				,РезультатЗапросаДляБлокировки);*/
					//СтруктураЗначенийБлокировки = Новый Структура("ДокументРезерва", ДокументРезерва);
					//СтруктураИсточникаДанных = Новый Структура("Склад,Номенклатура","Склад","Номенклатура");
					if(true/*СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара" 
				И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, Отказ, Заголовок);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			if(true/*РезультатЗапроса.Пустой()*/)
			{
			}
			//Выборка = РезультатЗапроса.Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "Остатка резерва " + 
		УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
								  ?(СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара", " "+Выборка.ХарактеристикаНоменклатурыПредставление, ""),
								  ?(УчитыватьСерии, " "+Выборка.СерияНоменклатурыПредставление, "")) +
		" на складе """ + СокрЛП(Выборка.Склад) + """ по документу """ + СокрЛП(Выборка.ДокументРезерва) + 
		""" недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.РезервыКоличество, Выборка.ДокументКоличество,
		Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		//КонтрольОстатков_СкладВТабЧасти_ЗаказВШапке
		//Процедура контролирует остаток по данному регистру для документов, у которых склад в шапке, а документ резерва - в таб части
		//	В связи с этим:
		//	1) Документ резерва извлекается из таб части документа и используется соединение с виртуальной таблицей ТоварыВРезерве по измерению ДОкументРезерва
		//	2) Используется отбор в виртуальной таблица ТоварыВРезерве по складу, указанному в шапке документа

		public void ТоварыВРезервеНаСкладахКонтрольОстатков_СкладВШапке_ЗаказВТабЧасти(/*СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ*/)
		{
			//ИмяРеквизитаСклад = "Склад";
			if(true/*СтруктураПараметров.ИмяДокумента = "ПеремещениеТоваров"*/)
			{
				//ИмяРеквизитаСклад = "СкладОтправитель";
			}
			//ТекСклад = СтруктураШапкиДокумента[ИмяРеквизитаСклад];
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				//ЕстьХарактеристика  = Ложь;
				//ЕстьСерия           = Ложь;
			}
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ЕстьХарактеристика,РеквизитДокументРезерва,ДопУсловияТабличнойЧасти",
			ЕстьХарактеристика,
			"ДокументРезерва",
			"//УСЛОВИЕ_ДокументРезерва");*/
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Резерв"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",        СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("Склад",                 ТекСклад);
			//Запрос.УстановитьПараметр("ИзРезерва",             Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва);
			//Запрос.УстановитьПараметр("ПустойСклад",           Справочники.Склады.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяСерия",           Справочники.СерииНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяХарактеристика",  Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//ТипДокументРезерва = СтруктураПараметров.МетаданныеДокумента.ТабличныеЧасти[СтруктураПараметров.ИмяТабличнойЧасти].Реквизиты.ДокументРезерва.Тип;
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(ТипДокументРезерва);
			//Запрос.УстановитьПараметр("МассивПустыхСсылок", МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура 										КАК Номенклатура,
	|	Док.Номенклатура.Представление               			КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление  КАК ЕдиницаХраненияОстатковПредставление,
	|   %ПОЛЕ_Док_Характеристика% 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 						КАК СерияНоменклатурыПредставление,
	|	Док.ДокументРезерва		 								КАК ДокументРезерва,
	|   %ПОЛЕ_Док_Количество% 									КАК ДокументКоличество,
	|   &Склад                                       			КАК Склад, 
	|	ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) 		КАК РезервыКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(," + УсловияТаблицыОстатков.Резерв + ") КАК Резервы
	|ПО 
	|	Резервы.Номенклатура = Док.Номенклатура
	|   И Резервы.ДокументРезерва = Док.ДокументРезерва	
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И (Резервы.СерияНоменклатуры = Док.СерияНоменклатуры ИЛИ (НЕ ЕстьNull(ВЫРАЗИТЬ(Док.ДокументРезерва КАК Документ.ЗаказПокупателя).ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей,ложь)))
	|
	|ГДЕ
	|	Не Док.Номенклатура.Комплект
	|	И Док.Ссылка  =  &ДокументСсылка
	|	//УСЛОВИЕ_ДокументРезерва
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%,
	|	//Сгруппировать_Серия
	|	Док.ДокументРезерва
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			//УчитыватьСерии = ложь;
			/*ТекстУсловие = "И Док.ДокументРезерва НЕ в (&МассивПустыхСсылок) 
		|И (Док.ДокументРезерва ССЫЛКА Документ.ЗаказПокупателя
		|ИЛИ Док.ДокументРезерва ССЫЛКА Документ.ВнутреннийЗаказ "
		+?(ТипДокументРезерва.СодержитТип(Тип("ДокументСсылка.ЗаказНаПроизводство"))," ИЛИ Док.ДокументРезерва ССЫЛКА Документ.ЗаказНаПроизводство","")
		+?(ТипДокументРезерва.СодержитТип(Тип("ДокументСсылка.ПриходныйОрдерНаТовары"))," ИЛИ Док.ДокументРезерва ССЫЛКА Документ.ПриходныйОрдерНаТовары","")+")";*/
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//УСЛОВИЕ_ДокументРезерва", ТекстУсловие);
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				/*//нет серии, характеристики, единицы измерения и коэффициента
*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Количество%","Сумма(Док.Количество)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Характеристика%","&ПустаяХарактеристика");
			}
			if(true/*не УчитыватьСерии*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Серия%","&ПустаяСерия");
			}
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ Номенклатура, ДокументРезерва" + ?(СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара", ", ХарактеристикаНоменклатуры", "") + "
			|ИЗ Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
			|ГДЕ
			|	Не Док.Номенклатура.Комплект
			|	И Док.Ссылка  =  &ДокументСсылка
			|	" + ТекстУсловие;*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыВРезервеНаСкладах"
				,РезультатЗапросаДляБлокировки);*/
					//СтруктураЗначенийБлокировки	= Новый Структура("Склад", ТекСклад);
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура,ДокументРезерва","Номенклатура", "ДокументРезерва");
					if(true/*СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара" 
				И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, Отказ, Заголовок);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			if(true/*РезультатЗапроса.Пустой()*/)
			{
			}
			//Выборка = РезультатЗапроса.Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "Остатка резерва " + 
		УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
								  ?(СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара", " "+Выборка.ХарактеристикаНоменклатурыПредставление, ""),
								  ?(УчитыватьСерии, " "+Выборка.СерияНоменклатурыПредставление, "")) +
		" на складе """ + СокрЛП(Выборка.Склад) + """ по документу """ + СокрЛП(Выборка.ДокументРезерва) + 
		""" недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.РезервыКоличество, Выборка.ДокументКоличество,
		Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		//Процедура КонтрольОстатков_СкладВШапке_ЗаказВТабЧасти()
		//Процедура контролирует остаток по данному регистру для документов, у которых склад и документ резерва - в шапке
		//	В связи с этим используется отбор в виртуальной таблица ТоварыВРезерве по складу и документу резерва, указанным в шапке документа

		public void ТоварыВРезервеНаСкладахКонтрольОстатков_СкладВШапке_ЗаказВШапке(/*СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ*/)
		{
			//ЕстьСпособСписания  = ложь;
			//ИмяРеквЗаказ = "Заказ";
			//ПолеСклад = "Склад";
			if(true/*СтруктураПараметров.ИмяДокумента = "РасходныйОрдерНаТовары"*/)
			{
				//ИмяРеквЗаказ = "ДокументПередачи";
			}
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				//ЕстьХарактеристика  = Ложь;
				//ЕстьСерия           = Ложь;
			}
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ЕстьХарактеристика,ДопУсловияТабличнойЧасти",
			ЕстьХарактеристика,
			"//УСЛОВИЕ_СпособСписания");*/
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Резерв"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",			СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("Склад",					СтруктураШапкиДокумента[ПолеСклад]);
			//Запрос.УстановитьПараметр("ИзРезерва",				Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва);
			//Запрос.УстановитьПараметр("ДокументРезерва",		СтруктураШапкиДокумента[ИмяРеквЗаказ]);
			//Запрос.УстановитьПараметр("ПустаяХарактеристика",	Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяСерия",			Справочники.СерииНоменклатуры.ПустаяСсылка());
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура 										КАК Номенклатура,
	|	Док.Номенклатура.Представление               			КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление  КАК ЕдиницаХраненияОстатковПредставление,
	|   %ПОЛЕ_Док_Характеристика% 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) 				КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия% 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) 						КАК СерияНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Количество% 									КАК ДокументКоличество,
	|   &ДокументРезерва 							 			КАК ДокументРезерва,
	|   &Склад                                       			КАК Склад, 
	|	ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) 		КАК РезервыКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки (, ДокументРезерва = &ДокументРезерва И " + УсловияТаблицыОстатков.Резерв + ") КАК Резервы
	|ПО 
	|	Резервы.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Серия_Остатки// И Резервы.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ГДЕ
	|	Не Док.Номенклатура.Комплект
	|	И Док.Ссылка  =  &ДокументСсылка
	|   //УСЛОВИЕ_СпособСписания
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			//УчитыватьСерии = ложь;
			if(true/*ЕстьСпособСписания*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//УСЛОВИЕ_СпособСписания","И Док.СпособСписанияОстаткаТоваров=&ИзРезерва");
			}
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				/*//нет серии, характеристики, единицы измерения и коэффициента
*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Количество%","Сумма(Док.Количество)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Характеристика%","&ПустаяХарактеристика");
			}
			if(true/*НЕ УчитыватьСерии*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Серия%","&ПустаяСерия");
			}
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ Номенклатура" + ?(СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара", ", ХарактеристикаНоменклатуры", "") + "
			|ИЗ Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
			|ГДЕ
			|	Не Док.Номенклатура.Комплект
			|	И Док.Ссылка  =  &ДокументСсылка
			|   " + ?(ЕстьСпособСписания, "И Док.СпособСписанияОстаткаТоваров=&ИзРезерва", "");*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыВРезервеНаСкладах"
				,РезультатЗапросаДляБлокировки);*/
					//СтруктураЗначенийБлокировки = Новый Структура("ДокументРезерва", СтруктураШапкиДокумента[ИмяРеквЗаказ]);
					//СтруктураЗначенийБлокировки.Вставить("Склад", СтруктураШапкиДокумента.Склад);
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура","Номенклатура");
					if(true/*СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара" 
				И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, Отказ, Заголовок);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			if(true/*РезультатЗапроса.Пустой()*/)
			{
			}
			//Выборка = РезультатЗапроса.Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "Остатка резерва " + 
		УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
								  ?(СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара", " "+Выборка.ХарактеристикаНоменклатурыПредставление, ""),
								  ?(УчитыватьСерии, " "+Выборка.СерияНоменклатурыПредставление, "")) +
		" на складе """ + СокрЛП(Выборка.Склад) + """ по документу """ + СокрЛП(Выборка.ДокументРезерва) + 
		""" недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.РезервыКоличество, Выборка.ДокументКоличество,
		Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		//КонтрольОстатков_СкладВШапке_ЗаказВШапке
		// Процедура контролирует свободный остаток для резервирования для документа "Поступление товаров и услуг"
		// Параметры:
		//	УчитыватьСерии    - признак необходимости контроля остатков в разрезе серий номенклатуры
		//  ТабРаспределениеОбособленныйУчет - таблица номенклатуры и количества, которые были распределены с учетом серий номенклатуры (заполняется если УчитыватьСерии=истина, анализируется если УчитыватьСерии=ложь)
		//	Особенности документа:
		//	1) Наличие в табличной части реквизита ПриходныйОрдер
		//	2) Поскольку документ резерва находится в табличной части, и в одном документе могут быть указаны документы резерва как с обособленным
		//		учетом по заказам, так и без обособленного учета - требуется особый алгоритм контроля свободных остатков:
		//		- сначала контролируются свободные остатки по заказам покупателей с обособленным учетом, контроль происходит с точностью до серии.
		//		- потом контролируются свободные остатки по всем остальным заказам, контроль происходит без учета серий. При этом из полученного
		//		свободного остатка исключаются свободные остатки, которые были заняты на первой итерации контроля остатков.

		public void ТоварыВРезервеНаСкладахКонтрольСвободныхОстатков_ПТиУ(/*СтруктураШапкиДокумента, СтруктураПараметров, УчитыватьСерии, ТабРаспределениеОбособленныйУчет, Заголовок, Отказ*/)
		{
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				//ЕстьХарактеристика  = Ложь;
				//ЕстьСерия           = Ложь;
			}
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ПолеСклад,ЕстьХарактеристика,ДопУсловияТабличнойЧасти",
			"Склад",
			ЕстьХарактеристика,
			" И (НЕ (Док.Заказ ССЫЛКА Документ.ВнутреннийЗаказ И ВЫРАЗИТЬ(Док.Заказ КАК Документ.ВнутреннийЗаказ).Заказчик = Док.Склад))");*/
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",			СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ПустаяХарактеристика",	Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяСерия",			Справочники.СерииНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("Новый",					Справочники.Качество.Новый);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                              	КАК Номенклатура,
	|	Док.Номенклатура.Представление                	КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|   Док.Склад                                     	КАК Склад,
	|   Док.ХарактеристикаНоменклатуры 					КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(Док.ХарактеристикаНоменклатуры) 	КАК ХарактеристикаНоменклатурыПредставление,
	|   Док.СерияНоменклатуры 							КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(Док.СерияНоменклатуры) 			КАК СерияНоменклатурыПредставление,
	|   Док.ДокументКоличество							КАК ДокументКоличество,
	|	ЕстьNull(Резервы.КоличествоОстаток,0) 			КАК РезервыКоличество,
	|	ЕстьNull(ТоварыНаСкладахОстатки.КоличествоОстаток,0)
	|		+ ЕстьNull(ТоварыВРозницеОстатки.КоличествоОстаток,0) 	КАК ОстаткиКоличество,
	|	ЕстьNull(КПередаче.КоличествоОстаток,0) 		КАК КПередачеКоличество
	|ИЗ 
	|	(ВЫБРАТЬ Номенклатура 	КАК Номенклатура,
	|		%ПОЛЕ_Характеристика% 	КАК ХарактеристикаНоменклатуры,
	|		%ПОЛЕ_Серия% 			КАК СерияНоменклатуры,
	|   	%ПОЛЕ_Количество% 		КАК ДокументКоличество,
	|		Склад
	|	ИЗ	
	|		Документ." + СтруктураПараметров.ИмяТаблицы + "
	|	ГДЕ
	|		Ссылка  =  &ДокументСсылка 
	|		И (НЕ (Заказ ССЫЛКА Документ.ВнутреннийЗаказ 
	|				И ВЫРАЗИТЬ(Заказ КАК Документ.ВнутреннийЗаказ).Заказчик = Склад))
	|   	И ПриходныйОрдер.БезПраваПродажи = ЛОЖЬ	
    |		//УСЛОВИЕ_ОбособленныйУчет
	|	СГРУППИРОВАТЬ ПО
	|		Номенклатура,
	|		%ПОЛЕ_Характеристика%,
	|		%ПОЛЕ_Серия%,
	|		Склад
	|	) КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|	ТоварыНаСкладахОстатки.Склад = Док.Склад
	|   И ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|   И ТоварыНаСкладахОстатки.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
	|   И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И ТоварыНаСкладахОстатки.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|	ТоварыВРозницеОстатки.Склад = Док.Склад
	|   И ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|   И ТоварыВРозницеОстатки.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
	|   И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И ТоварыВРозницеОстатки.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|   Резервы.Склад = Док.Склад
	|	И Резервы.Номенклатура = Док.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И Резервы.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|   КПередаче.Склад = Док.Склад
	|	И Док.Номенклатура = КПередаче.Номенклатура 
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И КПередаче.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки,
	|  РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки 
	|	 // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			//СОЕДИНЕНИЕ_Характеристика_Остатки = "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)";
			//СОЕДИНЕНИЕ_Серия_Остатки          = "ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				/*//нет серии, характеристики, единицы измерения и коэффициента
*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Количество%","Сумма(Количество)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Характеристика%","&ПустаяХарактеристика");
			}
			if(true/*не УчитыватьСерии*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Серия%","&ПустаяСерия");
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Характеристика_Остатки%", СОЕДИНЕНИЕ_Характеристика_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Серия_Остатки%", СОЕДИНЕНИЕ_Серия_Остатки);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			if(true/*РезультатЗапроса.Пустой()*/)
			{
			}
			//Выборка = РезультатЗапроса.Выбрать();
			//КоличествоСтрокРаспределено = ТабРаспределениеОбособленныйУчет.Количество();
			while(true/*Выборка.Следующий()*/)
			{
				//КоличествоВРезерве  = Выборка.РезервыКоличество;
				//КоличествоНаСкладе  = Выборка.ОстаткиКоличество;
				//КоличествоКПередаче = Выборка.КПередачеКоличество;
				//СвободныйОстаток = КоличествоНаСкладе  - КоличествоВРезерве - КоличествоКПередаче;
				if(true/*УчитыватьСерии*/)
				{
					/*//на первом проходе заполняем таблицу распределенных остатков с учетом серий
*/
					//СтрокаРаспределено = ТабРаспределениеОбособленныйУчет.Добавить();
					//ЗаполнитьЗначенияСвойств(СтрокаРаспределено,Выборка);
					//СтрокаРаспределено.Количество = мин(СвободныйОстаток, Выборка.ДокументКоличество);
				}
				if(true/*СвободныйОстаток < Выборка.ДокументКоличество*/)
				{
					/*// Требуемое количество товара
*/
					/*// Свободное количество товара
*/
					/*// Количество товара в резерве
*/
					/*// Количество товара к передаче
*/
					/*// Количество товара к получению
*/
					/*// Склад (представление)
*/
					/*// Заказ поставщику (представление)
*/
					/*// Номенклатура (представление)
*/
					/*// Характеристика (представление)
*/
					/*// Серия номенклатуры (представление)
*/
					/*// Качество товара (представление)
*/
					/*// Единица хранения остатков (представление)
*/
					/*, "Свободного остатка для резервирования "
			);*/
				}
			}
			if(true/*УчитыватьСерии*/)
			{
				//ТабРаспределениеОбособленныйУчет.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, Склад", "Количество");
			}
		}
		//КонтрольСвободныхОстатков_ПТиУ
		// Процедура контролирует свободный остаток для резервирования для документов "РезервированиеТоваров, Корректировка заказа... Заказ ... (покупателя, внутренний, на производство)"
		//	Особенности:
		//	1) Склад для резервирования указан в табличной части
		//	2) Документ резерва указан в шапке
		//	3) Для документов "Корректировка..." предусмотрен контроль остатков в регистре ТоварыВРезерве в случае отрицательного количества в таб части

		public void ТоварыВРезервеНаСкладахКонтрольСвободныхОстатков_Заказ_КорректировкаЗаказа_Резервирование(/*СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ*/)
		{
			//ИмяРеквизитаРазмещение = "Размещение";
			if(true/*СтруктураПараметров.ИмяДокумента = "РезервированиеТоваров"*/)
			{
				//ИмяРеквизитаРазмещение = "НовоеРазмещение";
			}
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка", СтруктураПараметров.ДокументСсылка);
			if(true/*СтруктураПараметров.ИмяДокумента = "КорректировкаЗаказаНаПроизводство"*/)
			{
				//ПараметрЗапросаЗаказПокупателя = СтруктураШапкиДокумента.Ссылка.ЗаказНаПроизводство;
			}
			//Запрос.УстановитьПараметр("ЗаказПокупателя", ПараметрЗапросаЗаказПокупателя);
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				//СтруктураУсловий = Новый Структура("ПолеСклад", ИмяРеквизитаРазмещение);
			}
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			//Запрос.УстановитьПараметр("ПустойСклад", Справочники.Склады.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяХарактеристика",  Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустаяСерия",  		   Справочники.СерииНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("Новый", Справочники.Качество.Новый);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура                              				КАК Номенклатура,
	|	Док.Номенклатура.Представление                				КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление 		КАК ЕдиницаХраненияОстатковПредставление,
	|	Док.ХарактеристикаНоменклатуры 								КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(Док.ХарактеристикаНоменклатуры) 				КАК ХарактеристикаНоменклатурыПредставление,
	|	Док.СерияНоменклатуры 										КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(Док.СерияНоменклатуры) 						КАК СерияНоменклатурыПредставление,
	|   Док.ДокументКоличество 				  						КАК ДокументКоличество,
	|   Док.Размещение	                                			КАК Склад, 
	|	ЕстьNull(Резервы.КоличествоОстаток,0) - ЕстьNull(РезервыПоЗаказу.КоличествоОстаток,0) КАК РезервыКоличество,
	|	ЕстьNull(РезервыПоЗаказу.КоличествоОстаток,0)   			КАК РезервыПоЗаказу,
	|	ЕстьNull(ТоварыНаСкладахОстатки.КоличествоОстаток,0)
	|		+ ЕстьNull(ТоварыВРозницеОстатки.КоличествоОстаток,0)	КАК ОстаткиКоличество,
	|	ЕстьNull(КПередаче.КоличествоОстаток,0)         			КАК КПередачеКоличество
	|ИЗ  	(ВЫБРАТЬ Номенклатура,
	|		%ПОЛЕ_Характеристика% КАК ХарактеристикаНоменклатуры,
	|		%ПОЛЕ_Серия% КАК СерияНоменклатуры,
	|   	%ПОЛЕ_Количество% КАК ДокументКоличество,
	|		%ПОЛЕ_Размещение% КАК Размещение
	|	ИЗ	
	|		Документ." + СтруктураПараметров.ИмяТаблицы + "
	|	ГДЕ
	|		Ссылка  =  &ДокументСсылка 
	|   	И ВЫРАЗИТЬ(%ПОЛЕ_Размещение% КАК Справочник.Склады) ССЫЛКА Справочник.Склады И %ПОЛЕ_Размещение% <> &ПустойСклад
	|	СГРУППИРОВАТЬ ПО
	|		Номенклатура,
	|		%ПОЛЕ_Характеристика%,
	|		%ПОЛЕ_Серия%,
	|		%ПОЛЕ_Размещение%
	|		)КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|	ТоварыНаСкладахОстатки.Склад = Док.Размещение
	|   И ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И ТоварыНаСкладахОстатки.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|	ТоварыВРозницеОстатки.Склад = Док.Размещение
	|   И ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И ТоварыВРозницеОстатки.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Резервы.Склад = Док.Размещение
	|   И Резервы.Номенклатура = Док.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И Резервы.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, &ЗаказПокупателя = ДокументРезерва И " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоЗаказу
	|ПО 
	|	РезервыПоЗаказу.Склад = Док.Размещение
	|   И РезервыПоЗаказу.Номенклатура = Док.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И РезервыПоЗаказу.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И РезервыПоЗаказу.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|   КПередаче.Склад = Док.Размещение
	|	И КПередаче.Номенклатура = Док.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|   //СОЕДИНЕНИЕ_Серия_Остатки// И КПередаче.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ГДЕ 	
	|	НЕ Док.Номенклатура.Комплект
	|
	// Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|ДЛЯ ИЗМЕНЕНИЯ 
	|	РегистрНакопления.ТоварыНаСкладах.Остатки, 
	|	РегистрНакопления.ТоварыВРознице.Остатки, 
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки, 
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки 
	|";*/
			//УчитыватьСерии = ложь;
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Размещение%", ИмяРеквизитаРазмещение);
			//СОЕДИНЕНИЕ_Характеристика_Остатки = "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)";
			//СОЕДИНЕНИЕ_Серия_Остатки          = "ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				/*//нет серии, характеристики, единицы измерения и коэффициента
*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Количество%","Сумма(Количество)");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Характеристика%","&ПустаяХарактеристика");
			}
			if(true/*не УчитыватьСерии*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Серия%","&ПустаяСерия");
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Характеристика_Остатки%", СОЕДИНЕНИЕ_Характеристика_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Серия_Остатки%", СОЕДИНЕНИЕ_Серия_Остатки);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				//КоличествоВРезерве  = Выборка.РезервыКоличество;
				//КоличествоНаСкладе  = Выборка.ОстаткиКоличество;
				//КоличествоКПередаче = Выборка.КПередачеКоличество;
				//КоличествоСнимаемое = ?(Выборка.ДокументКоличество>=0, 0, (-1)*Выборка.ДокументКоличество);
				/*//актуально для корректировок - количество, которое снимается из резерва
*/
				//КоличествоРезервируемое = ?(Выборка.ДокументКоличество<=0, 0, Выборка.ДокументКоличество);
				//ВРезервеПоЗаказу = ?(Выборка.РезервыПоЗаказу <0, 0, Выборка.РезервыПоЗаказу);
				if(true/*КоличествоРезервируемое>0*/)
				{
					//СвободныйОстаток = КоличествоНаСкладе + КоличествоСнимаемое - КоличествоВРезерве - КоличествоКПередаче - ВРезервеПоЗаказу;
					if(true/*СвободныйОстаток < КоличествоРезервируемое*/)
					{
						/*// Требуемое количество товара
*/
						/*// Свободное количество товара
*/
						/*// Количество товара в резерве
*/
						/*// Количество товара к передаче
*/
						/*// Количество товара к получению
*/
						/*// Склад (представление)
*/
						/*// Заказ поставщику (представление)
*/
						/*// Номенклатура (представление)
*/
						/*// Характеристика (представление)
*/
						/*// Серия номенклатуры (представление)
*/
						/*// Качество товара (представление)
*/
						/*// Единица хранения остатков (представление)
*/
						/*, "Свободного остатка для резервирования "
				);*/
					}
				}
				if(true/*КоличествоСнимаемое>0*/)
				{
					if(true/*ВРезервеПоЗаказу < КоличествоСнимаемое*/)
					{
						/*УправлениеЗапасами.ОшибкаНетОстатка(
				"Недостаточно товара """ + Выборка.НоменклатураПредставление + """" +
				?(СтруктураПараметров.ИмяТабличнойЧасти <> "ВозвратнаяТара", " """ + Выборка.ХарактеристикаНоменклатурыПредставление + """", "") 
				+ ?(УчитыватьСерии, " """ +Выборка.СерияНоменклатурыПредставление+ """", "")
				+ " в резерве на складе """ + СокрЛП(Выборка.Склад) + """",
				ВРезервеПоЗаказу,
				КоличествоСнимаемое,
				Выборка.ЕдиницаХраненияОстатковПредставление,
				Отказ, Заголовок);*/
					}
				}
			}
			//;;
		}
		//КонтрольСвободныхОстатков_Заказ_КорректировкаЗаказа_Резервирование
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ТоварыКПередачеСоСкладов
		// Процедура контролирует остаток по данному регистру по переданному документу
		// и его табличной части. В случае недостатка товаров выставляется флаг отказа и
		// выдается сообщение.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  ИмяТабличнойЧасти - строка, имя табличной части, которая проводится по регистру,
		//  СтруктураШапкиДокумента - структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  Отказ             - флаг отказа в проведении,
		//  Заголовок         - строка, заголовок сообщения об ошибке проведения.
		//

		public void ТоварыКПередачеСоСкладовКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, Отказ, Заголовок, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			if(true/*УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровНаСкладе()*/)
			{
			}
			//МетаданныеДокумента = СтруктураШапкиДокумента.Ссылка.Метаданные();
			//ИмяДокумента        = МетаданныеДокумента.Имя;
			//ИмяТаблицы          = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			//МетаданныеТабЧасти  = МетаданныеДокумента.ТабличныеЧасти[ИмяТабличнойЧасти];
			if(true/*глЗначениеПеременной("ИспользоватьРегистрСвободныеОстатки")
		И ИмяДокумента <> "СписаниеТоваров"
		И ИмяДокумента <> "РасходныйОрдерНаТовары"*/)
			{
				//СвободныеОстаткиКонтрольОстатков(ИмяТабличнойЧасти, СтруктураШапкиДокумента, Отказ, Заголовок);
			}
			//ИспользоватьХарактеристикиНоменклатуры = глЗначениеПеременной("ИспользоватьХарактеристикиНоменклатуры");
			//ИспользоватьСерииНоменклатуры = глЗначениеПеременной("ИспользоватьСерииНоменклатуры");
			//СтруктураПараметров = Новый Структура;
			//СтруктураПараметров.Вставить("МетаданныеДокумента",	МетаданныеДокумента);
			//СтруктураПараметров.Вставить("ИмяДокумента", 		ИмяДокумента);
			//СтруктураПараметров.Вставить("ИмяТабличнойЧасти", 	ИмяТабличнойЧасти);
			//СтруктураПараметров.Вставить("ИмяТаблицы", 			ИмяТаблицы);
			//СтруктураПараметров.Вставить("ИспользоватьХарактеристикиНоменклатуры",					ИспользоватьХарактеристикиНоменклатуры);
			//СтруктураПараметров.Вставить("ИспользоватьСерииНоменклатуры",							ИспользоватьСерииНоменклатуры);
			if(true/*СтруктураПараметров.ИмяДокумента = "РеализацияТоваровУслуг"*/)
			{
				//ТоварыКПередачеСоСкладовКонтрольСвободныхОстатков_Реализация(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
			}
		}
		// КонтрольОстатков()

		public void ТоварыКПередачеСоСкладовДополнитьТекстЗапроса(/*ТекстЗапроса, СтруктураПараметров, ЕстьХарактеристика, ЕстьСерия, ЕстьКачество, ЕстьКоэффициент, ЕстьСкладВТабЧасти = Ложь*/)
		{
			/*// ХарактеристикаНоменклатуры
*/
			//СОЕДИНЕНИЕ_Характеристика_Остатки = "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)";
			if(true/*ЕстьХарактеристика*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Характеристика%", "Док.ХарактеристикаНоменклатуры");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Характеристика",     ",ХарактеристикаНоменклатуры");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Характеристика",  ",ТЧ.ХарактеристикаНоменклатуры");
				if(true/*СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры*/)
				{
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Характеристика_Остатки//", "");
					//СОЕДИНЕНИЕ_Характеристика_Остатки = "Док.ХарактеристикаНоменклатуры";
				}
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Характеристика_Остатки%", СОЕДИНЕНИЕ_Характеристика_Остатки);
			/*// СерияНоменклатуры
*/
			if(true/*НЕ СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ОстаткиБезСерии//", "И ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)");
			}
			//СОЕДИНЕНИЕ_Серия_Остатки = "ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			if(true/*ЕстьСерия*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Серия%", "Док.СерияНоменклатуры");
				if(true/*СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
				{
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_Остатки//", "");
					//СОЕДИНЕНИЕ_Серия_Остатки = "Док.СерияНоменклатуры";
				}
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%СОЕДИНЕНИЕ_Серия_Остатки%", СОЕДИНЕНИЕ_Серия_Остатки);
			/*// Качество
*/
			if(true/*ЕстьКачество*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Качество%", "Док.Качество");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//СОЕДИНЕНИЕ_Качество_Остатки//", "");
				//СОЕДИНЕНИЕ_Качество_Остатки = "Док.Качество";
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%СОЕДИНЕНИЕ_Качество_Остатки%", СОЕДИНЕНИЕ_Качество_Остатки);
			/*// Количество
*/
			if(true/*ЕстьКоэффициент*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Док_Количество%",	 "СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3)))");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Количество%",		 "СУММА(ВЫРАЗИТЬ(Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3)))");
			}
		}
		// ДополнитьТекстЗапроса
		// Контролируется возможность списания номенклатуры по документу резерва.
		// Не допускаются отрицательные остатки по номенклатуре в разрезе документа-резерва
		//
		// Контроль выполняется для документов "Расходный ордер на товары" и "Списание товаров"
		//	Заказ и склад отсутствуют
		//	Характеристика, серия, качество, коэффициент - зависят от таб.части. (товар/тара).
		//
		// Параметры:
		//	Нет
		//

		public void ТоварыКПередачеСоСкладовКонтрольОстатков_Остатки(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьДокументПередачи  = СтруктураПараметров.МетаданныеДокумента.Реквизиты.Найти("ДокументПередачи") <> Неопределено;
			//ЕстьХарактеристика    = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")         <> Неопределено;
			//ЕстьСерия             = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры")                  <> Неопределено;
			//ЕстьКачество          = МетаданныеТабЧасти.Реквизиты.Найти("Качество")                           <> Неопределено;
			//ЕстьФлагУказанияСерий = МетаданныеТабЧасти.Реквизиты.Найти("СерияУказываетсяПриОтпускеСоСклада") <> Неопределено;
			//ЕстьКоэффициент       = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                        <> Неопределено;
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество",
			ЕстьХарактеристика,
			ЕстьКачество);*/
			//СтруктураУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка", СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("Склад",          СтруктураШапкиДокумента.Склад);
			//Запрос.УстановитьПараметр("ПустаяСерия",    Справочники.СерииНоменклатуры.ПустаяСсылка());
			if(true/*ЕстьДокументПередачи*/)
			{
				//Запрос.УстановитьПараметр("ДокументПередачи", СтруктураШапкиДокумента.ДокументПередачи);
			}
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	%ПОЛЕ_Док_Характеристика%  КАК ХарактеристикаНоменклатуры,
	|	%ПОЛЕ_Док_Серия%           КАК СерияНоменклатуры,
	|	%ПОЛЕ_Док_Качество%        КАК Качество,
	|	%ПОЛЕ_Док_ДокументРезерва% КАК ДокументПередачи,
	|	%ПОЛЕ_Док_Количество%      КАК ДокументКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) КАК ОстатокКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + " %УСЛОВИЕ_ДокументРезерва%) КАК Остатки
	|ПО 
	|	Остатки.Номенклатура = Док.Номенклатура
	|   И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|   И Остатки.ДокументПередачи = %СОЕДИНЕНИЕ_ДокументПередачи_Остатки%
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И Остатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|   //СОЕДИНЕНИЕ_Серия_Остатки//
	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|   //УСЛОВИЕ_ЗаполненДокРезерва
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|	%ПОЛЕ_Док_Характеристика%,
	|	%ПОЛЕ_Док_Серия%,
	|	%ПОЛЕ_Док_Качество%,
	|	%ПОЛЕ_Док_ДокументРезерва%
	|
	|ИМЕЮЩИЕ
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			if(true/*ЕстьДокументПередачи*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_ДокументРезерва%",            "&ДокументПередачи");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УСЛОВИЕ_ДокументРезерва%",             "И &ДокументПередачи = ДокументПередачи");
				//СОЕДИНЕНИЕ_ДокументПередачи_Остатки = "&ДокументПередачи";
				//УСЛОВИЕ_ЗаполненДокРезерва = "";
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%СОЕДИНЕНИЕ_ДокументПередачи_Остатки%", СОЕДИНЕНИЕ_ДокументПередачи_Остатки);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//УСЛОВИЕ_ЗаполненДокРезерва", УСЛОВИЕ_ЗаполненДокРезерва);
			if(true/*ЕстьСерия И СтруктураПараметров.ИспользоватьСерииНоменклатуры*/)
			{
				if(true/*ЕстьФлагУказанияСерий*/)
				{
					/*СОЕДИНЕНИЕ_Серия_Остатки = "И ((НЕ Док.СерияУказываетсяПриОтпускеСоСклада И Остатки.СерияНоменклатуры = Док.СерияНоменклатуры) ИЛИ
						   |     (Док.СерияУказываетсяПриОтпускеСоСклада И Остатки.СерияНоменклатуры = &ПустаяСерия))";*/
				}
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//СОЕДИНЕНИЕ_Серия_Остатки//", СОЕДИНЕНИЕ_Серия_Остатки);
			}
			//ТоварыКПередачеСоСкладовДополнитьТекстЗапроса(ТекстЗапроса, СтруктураПараметров, ЕстьХарактеристика, ЕстьСерия, ЕстьКачество, ЕстьКоэффициент, Ложь);
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ
			|Док.Номенклатура КАК Номенклатура"
			+ ?(ЕстьКачество, ", Док.Качество КАК Качество ","")
			+ ?(НЕ ЕстьДокументПередачи, ", Док.ДокументРезерва КАК ДокументПередачи ","")
			+ ?(ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры ","") + "
			|ИЗ 
			|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
			|
			|ГДЕ 
			|	Док.Ссылка = &ДокументСсылка
			|   " + УСЛОВИЕ_ЗаполненДокРезерва;*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыКПередачеСоСкладов"
				,РезультатЗапросаДляБлокировки);*/
					//СтруктураЗначенийБлокировки = Новый Структура("Склад", СтруктураШапкиДокумента.Склад);
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура", "Номенклатура");
					if(true/*ЕстьХарактеристика И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					if(true/*ЕстьКачество*/)
					{
						//СтруктураИсточникаДанных.Вставить("Качество","Качество");
					}
					if(true/*ЕстьДокументПередачи*/)
					{
						//СтруктураЗначенийБлокировки.Вставить("ДокументПередачи", СтруктураШапкиДокумента.ДокументПередачи);
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, Отказ, Заголовок);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				//ТипДокументПередачи = ТипЗнч(Выборка.ДокументПередачи);
				if(true/*НЕ (ТипДокументПередачи=Тип("ДокументСсылка.РеализацияТоваровУслуг")
			или ТипДокументПередачи=Тип("ДокументСсылка.ПередачаТоваров")
            или ТипДокументПередачи=Тип("ДокументСсылка.ПеремещениеТоваров")
            или ТипДокументПередачи=Тип("ДокументСсылка.ВозвратТоваровПоставщику"))*/)
				{
				}
				/*СтрокаСообщения = "Остатка " + УправлениеЗапасами.ПредставлениеНоменклатуры(
				Выборка.НоменклатураПредставление, 
				?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""),
				?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
			" к передаче со склада " + СокрЛП(СтруктураШапкиДокумента.Склад) +
			" по документу " + Выборка.ДокументПередачи +
				?(ЕстьКачество, " с качеством " + Выборка.Качество, "") + " недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокКоличество, Выборка.ДокументКоличество,
			Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		// КонтрольОстатков_Остатки()
		// Контролируется возможность списания номенклатуры из свободного остатки под расходный ордер на товары.
		// Не допускается превышение свободного остатка по номенклатуре на складах.
		//
		// Контроль выполняется для документов "Реализация товаров" и "Возврат товаров поставщику".
		// В этих документах есть склад, заказ и качество в таб.части, наличие характеристики и серии зависит от таб.части.
		//
		// Параметры:
		//	Нет
		//

		public void ТоварыКПередачеСоСкладовКонтрольСвободныхОстатков_Реализация(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ИмяРеквизитаЗаказ = "ЗаказПокупателя";
			if(true/*СтруктураПараметров.ИмяДокумента = "ВозвратТоваровПоставщику"*/)
			{
				//ИмяРеквизитаЗаказ = "Заказ";
			}
			//ЕстьХарактеристика = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")  <> Неопределено;
			//ЕстьСерия          = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры") <> Неопределено;
			//ЕстьКачество       = МетаданныеТабЧасти.Реквизиты.Найти("Качество")          <> Неопределено;
			//ЕстьКоэффициент    = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")       <> Неопределено;
			//ЕстьСпособСписания    = МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров")       <> Неопределено;
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ПолеСклад,ЕстьХарактеристика,ЕстьКачество",
			"Склад",
			ЕстьХарактеристика,
			ЕстьКачество);*/
			//СтруктураУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка", СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ПустаяСерия"   , Справочники.СерииНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойОрдер",    Документы.ПриходныйОрдерНаТовары.ПустаяСсылка());
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(МетаданныеТабЧасти.Реквизиты[ИмяРеквизитаЗаказ].Тип);
			//Запрос.УстановитьПараметр("МассивПустыхЗаказов",		 МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	Неопределено              КАК СерияНоменклатуры,
	|	%ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
	|	%ПОЛЕ_Док_Качество%       КАК Качество,
	|   Док.Склад                 КАК Склад,
	|	%ПОЛЕ_Док_Количество%     КАК ДокументКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0)       		КАК РезервыКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(РезервыПоСделке.КоличествоОстаток), 0)	КАК РезервыПоСделкеКоличество,
	|	0                                                      		КАК КПолучению,
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0)) КАК ОстаткиКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)			КАК КПередачеКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|	ТоварыНаСкладахОстатки.Склад = Док.Склад
	|	И ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И ТоварыНаСкладахОстатки.Качество = Док.Качество
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|	ТоварыВРозницеОстатки.Склад = Док.Склад
	|	И ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И ТоварыВРозницеОстатки.Качество = Док.Качество
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|   Резервы.Склад = Док.Склад
	|	И Резервы.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	// УСЛОВИЕ_Док_СписаниеСоСклада
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	(ВЫБРАТЬ
	|		ТЧ.Номенклатура,
	|		ТЧ.Склад
	|		//ПОЛЕ_ТЧ_Характеристика
	|		//количество, списываемое за счет резерва, не может превышать количество указанное в документе
	|		,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) 
	|			ТОГДА Сумма(ТЧ.ДокументКоличество)
	|			ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
	|		КОНЕЦ КАК КоличествоОстаток
	|	ИЗ
	|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
	|		(ВЫБРАТЬ  
	|			Номенклатура, 
	|			Склад,
	|			%ПОЛЕ_Заказ% КАК ДокументРезерва,
	|			%ПОЛЕ_Количество% КАК ДокументКоличество
	|			//ПОЛЕ_Характеристика
	|		ИЗ 
	|			Документ." + СтруктураПараметров.ИмяТаблицы + "
	|		ГДЕ  Ссылка = &ДокументСсылка
	|			И %ПОЛЕ_Заказ% НЕ В (&МассивПустыхЗаказов)
	|			// УСЛОВИЕ_СписаниеИзРезерва
	|		СГРУППИРОВАТЬ ПО
	|			Номенклатура, 
	|			Склад,
	|			%ПОЛЕ_Заказ%
	|			//ПОЛЕ_Характеристика
	|		) КАК ТЧ
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
	|	ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура 
	|		И ТЧ.Склад = ВремРезервы.Склад
	|		//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТЧ.ХарактеристикаНоменклатуры = ВремРезервы.ХарактеристикаНоменклатуры
	|		И ВремРезервы.ДокументРезерва = ТЧ.ДокументРезерва
	|	СГРУППИРОВАТЬ ПО 
	|		ТЧ.Номенклатура,
	|		ТЧ.Склад
	|		//ПОЛЕ_ТЧ_Характеристика
	|) КАК РезервыПоСделке
	|ПО 
	|	Док.Номенклатура = РезервыПоСделке.Номенклатура
	|	И Док.Склад = РезервыПоСделке.Склад
	|	И Док.%ПОЛЕ_Заказ% НЕ В (&МассивПустыхЗаказов)
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И РезервыПоСделке.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
    |	// УСЛОВИЕ_Док_СписаниеИзРезерва
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|   КПередаче.Склад = Док.Склад
	|	И КПередаче.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И КПередаче.Качество = Док.Качество
	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|	%ПОЛЕ_Док_Характеристика%,
	|	%ПОЛЕ_Док_Качество%,
	|   Док.Склад
	|
	|ИМЕЮЩИЕ
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))
	|	- ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0)
	|	- ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)
	|	+ ЕСТЬNULL(МАКСИМУМ(РезервыПоСделке.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы"
	+ ?(ЕстьСерия, "
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	Док.СерияНоменклатуры	  КАК СерияНоменклатуры,
	|	%ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
	|	%ПОЛЕ_Док_Качество%       КАК Качество,
	|   Док.Склад                 КАК Склад,
	|	%ПОЛЕ_Док_Количество%     КАК ДокументКоличество,
	|	0 КАК РезервыКоличество,
	|	0 КАК РезервыПоСделкеКоличество,
	|	0 КАК КПолучению,
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0)) КАК ОстаткиКоличество,
	|	ЕСТЬNULL( МАКСИМУМ( КПередаче.КоличествоОстаток), 0) КАК КПередачеКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|	ТоварыНаСкладахОстатки.Склад = Док.Склад
	|	И ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И ТоварыНаСкладахОстатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И ТоварыНаСкладахОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|	ТоварыВРозницеОстатки.Склад = Док.Склад
	|	И ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И ТоварыВРозницеОстатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И ТоварыВРозницеОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|   КПередаче.Склад = Док.Склад
	|	И КПередаче.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Серия_Остатки// И КПередаче.СерияНоменклатуры = Док.СерияНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И КПередаче.Качество = Док.Качество
	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|	И Док.СерияНоменклатуры <> &ПустаяСерия
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|	Док.СерияНоменклатуры,
	|   Док.Склад,
	|	%ПОЛЕ_Док_Характеристика%,
	|	%ПОЛЕ_Док_Качество%
	|
	|ИМЕЮЩИЕ
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))
	|	- ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|", "");*/
			//ТекстУсловиеДокСписаниеСоСклада  = " И Док.%ПОЛЕ_Заказ% В (&МассивПустыхЗаказов)";
			//ТекстУсловиеДокСписаниеИзРезерва = "";
			//ТекстУсловиеСписаниеИзРезерва    = "";
			if(true/*ЕстьСпособСписания*/)
			{
				//ТекстУсловиеДокСписаниеСоСклада  = " И Док.СпособСписанияОстаткаТоваров = &СоСклада";
				//ТекстУсловиеДокСписаниеИзРезерва = " И Док.СпособСписанияОстаткаТоваров = &ИзРезерва";
				//ТекстУсловиеСписаниеИзРезерва    = " И СпособСписанияОстаткаТоваров = &ИзРезерва";
				//Запрос.УстановитьПараметр("СоСклада", Перечисления.СпособыСписанияОстаткаТоваров.СоСклада);
				//Запрос.УстановитьПараметр("ИзРезерва", Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва);
			}
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// УСЛОВИЕ_СписаниеИзРезерва", ТекстУсловиеСписаниеИзРезерва);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// УСЛОВИЕ_Док_СписаниеСоСклада", ТекстУсловиеДокСписаниеСоСклада);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// УСЛОВИЕ_Док_СписаниеИзРезерва", ТекстУсловиеДокСписаниеИзРезерва);
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Заказ%", ИмяРеквизитаЗаказ);
			//ТоварыКПередачеСоСкладовДополнитьТекстЗапроса(ТекстЗапроса, СтруктураПараметров, ЕстьХарактеристика, ЕстьСерия, ЕстьКачество, ЕстьКоэффициент, Ложь);
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СвободныйОстаток = Выборка.ОстаткиКоличество
							- Выборка.РезервыКоличество
							- Выборка.КПередачеКоличество
							- Выборка.КПолучению
							+ Выборка.РезервыПоСделкеКоличество;*/
				/*СтрокаСообщения  = "Свободного остатка для резервирования " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(
				Выборка.НоменклатураПредставление, 
				?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""),
				?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
			" на складе """ + СокрЛП(Выборка.Склад) + """" +
			?(ЕстьКачество, " с качеством " + Выборка.Качество, "") + " недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, СвободныйОстаток, Выборка.ДокументКоличество,
			Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		// КонтрольСвободныхОстатков_Реализация()
		// Контролируется возможность списания номенклатуры из свободного остатки под расходный ордер на товары.
		// Не допускается превышение свободного остатка по номенклатуре на складах.
		//
		// Контроль выполняется для документа "ВозвратТоваровПоставщику"
		//	склад в табличной части, заказ отсутствует.
		//	Характеристика, Серия, Коэффициент есть.
		//	Качество отсутствует.
		//
		// Параметры:
		//  Нет

		public void ТоварыКПередачеСоСкладовКонтрольСвободныхОстатков_ВозвратОборудование(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьХарактеристика = Истина;
			//ЕстьСерия          = Истина;
			//ЕстьКачество       = Ложь;
			//ЕстьКоэффициент    = Истина;
			//ЕстьСпособСписания = Ложь;
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ПолеСклад,ЕстьХарактеристика,ЕстьКачество",
			"Склад",
			ЕстьХарактеристика,
			ЕстьКачество);*/
			//СтруктураУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка", СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ПустаяСерия"   , Справочники.СерииНоменклатуры.ПустаяСсылка());
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	Неопределено              КАК СерияНоменклатуры,
	|	Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	|   Док.Склад                 КАК Склад,
	|	%ПОЛЕ_Док_Количество%     КАК ДокументКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0)       		КАК РезервыКоличество,
	|	0                                                      		КАК КПолучению,
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) 
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0)) КАК ОстаткиКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)			КАК КПередачеКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|		РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|   ТоварыНаСкладахОстатки.Склад = Док.Склад
	|	И ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыНаСкладахОстатки.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|		РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|	ТоварыВРозницеОстатки.Склад = Док.Склад
	|   И ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыВРозницеОстатки.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|   Резервы.Склад = Док.Склад
	|	И Резервы.Номенклатура = Док.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|	КПередаче.Номенклатура = Док.Номенклатура
	|   И КПередаче.Склад = Док.Склад
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|	Док.ХарактеристикаНоменклатуры,
	|   Док.Склад
	|
	|ИМЕЮЩИЕ
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) 
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))
	|	- ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0)
	|	- ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)
	|	< %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	Док.СерияНоменклатуры	  КАК СерияНоменклатуры,
	|	Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	|   Док.Склад                 КАК Склад,
	|	%ПОЛЕ_Док_Количество%     КАК ДокументКоличество,
	|	0 КАК РезервыКоличество,
	|	0 КАК КПолучению,
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) 
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0)) КАК ОстаткиКоличество,
	|	ЕСТЬNULL( МАКСИМУМ( КПередаче.КоличествоОстаток), 0) КАК КПередачеКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|   ТоварыНаСкладахОстатки.Склад = Док.Склад
	|	И ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыНаСкладахОстатки.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
	|   И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И ТоварыНаСкладахОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|   ТоварыВРозницеОстатки.Склад = Док.Склад
	|	И ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыВРозницеОстатки.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
	|   И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И ТоварыНаСкладахОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|   КПередаче.Склад = Док.Склад
	|	И КПередаче.Номенклатура = Док.Номенклатура
	|   //СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Серия_Остатки// И КПередаче.СерияНоменклатуры = Док.СерияНоменклатуры
	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|	И Док.СерияНоменклатуры <> &ПустаяСерия
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|	Док.СерияНоменклатуры,
	|   Док.Склад,
	|	Док.ХарактеристикаНоменклатуры
	|
	|ИМЕЮЩИЕ
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) 
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0)) - ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			//ТоварыКПередачеСоСкладовДополнитьТекстЗапроса(ТекстЗапроса, СтруктураПараметров, ЕстьХарактеристика, ЕстьСерия, ЕстьКачество, ЕстьКоэффициент, Истина);
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СвободныйОстаток = Выборка.ОстаткиКоличество
							- Выборка.РезервыКоличество
							- Выборка.КПередачеКоличество
							- Выборка.КПолучению;*/
				/*СтрокаСообщения  = "Свободного остатка для резервирования " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(
				Выборка.НоменклатураПредставление, 
				Выборка.ХарактеристикаНоменклатуры, 
				Выборка.СерияНоменклатуры) +
			" на складе """ + СокрЛП(Выборка.Склад) + """" +
			" с качеством " + Справочники.Качество.Новый + " недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, СвободныйОстаток, Выборка.ДокументКоличество,
			Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		// Контролируется возможность списания номенклатуры из свободного остатки под расходный ордер на товары.
		// Не допускается превышение свободного остатка по номенклатуре на складах.
		//
		// Контроль выполняется для документа "Перемещение товаров".
		// Документ отличается наличием в шапке двух складов - Склада отправителя и склада получателя,
		// также в связи с этим может осуществлять перемещение товаров полученных по ордерам. Ордера
		// прописываются в реквизите ДокументРезерва табличной части.
		// В шапке имеется внутренний заказ, при его выборе логика работы документа также меняется.
		// Других заказов документ не имеет.
		//
		// Параметры:
		//  Нет
		//

		public void ТоварыКПередачеСоСкладовКонтрольСвободныхОстатков_Перемещение(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьХарактеристика  = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")  <> Неопределено;
			//ЕстьСерия           = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры") <> Неопределено;
			//ЕстьКачество        = МетаданныеТабЧасти.Реквизиты.Найти("Качество")          <> Неопределено;
			//ЕстьКоэффициент     = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")       <> Неопределено;
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество",
			ЕстьХарактеристика,
			ЕстьКачество);*/
			//СтруктураУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка", СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ПустаяСерия"   , Справочники.СерииНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойОрдер",    Документы.ПриходныйОрдерНаТовары.ПустаяСсылка());
			//Запрос.УстановитьПараметр("Склад", СтруктураШапкиДокумента.СкладОтправитель);
			//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(МетаданныеТабЧасти.Реквизиты.ДокументРезерва.Тип);
			//Запрос.УстановитьПараметр("МассивПустыхЗаказов",		 МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	Неопределено              КАК СерияНоменклатуры,
	|	%ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
	|	%ПОЛЕ_Док_Качество%       КАК Качество,
	|	&Склад         КАК Склад,
	|	%ПОЛЕ_Док_Количество%     КАК ДокументКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0)       		КАК РезервыКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(РезервыПоСделке.КоличествоОстаток), 0)	КАК РезервыПоСделкеКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(КПолучению.КоличествоОстаток), 0)			КАК КПолучению,
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))	КАК ОстаткиКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)			КАК КПередачеКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|	ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И ТоварыНаСкладахОстатки.Качество = Док.Качество
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|	ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И ТоварыВРозницеОстатки.Качество = Док.Качество
	|
	//таблица товаров в резерве на складе (определяется для строк, которые списываются за счет свободного остатка)
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Резервы.Номенклатура = Док.Номенклатура
	|	И Док.ДокументРезерва В (&МассивПустыхЗаказов)
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	(ВЫБРАТЬ
	|		ТЧ.Номенклатура
	|		//ПОЛЕ_ТЧ_Характеристика
	|		//количество, списываемое за счет резерва, не может превышать количество указанное в документе
	|		,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) 
	|			ТОГДА Сумма(ТЧ.ДокументКоличество)
	|			ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
	|		КОНЕЦ КАК КоличествоОстаток
	|	ИЗ
	|		//сгруппированная табличная часть документа с отбором строк которые списываются из резерва
	|		(ВЫБРАТЬ  
	|			Номенклатура, 
	|			ДокументРезерва,
	|			%ПОЛЕ_Количество% КАК ДокументКоличество
	|			//ПОЛЕ_Характеристика
	|		ИЗ 
	|			Документ." + СтруктураПараметров.ИмяТаблицы +"
	|		ГДЕ
	|			Ссылка = &ДокументСсылка
	|			И ДокументРезерва НЕ В (&МассивПустыхЗаказов)
	|		СГРУППИРОВАТЬ ПО
	|			Номенклатура, 
	|			ДокументРезерва
	|			//ПОЛЕ_Характеристика
	|		) КАК ТЧ
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
	|	ПО
	|		ТЧ.Номенклатура = ВремРезервы.Номенклатура 
	|		И ВремРезервы.ДокументРезерва = ТЧ.ДокументРезерва
	|		//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТЧ.ХарактеристикаНоменклатуры = ВремРезервы.ХарактеристикаНоменклатуры
	|	СГРУППИРОВАТЬ ПО 
	|		ТЧ.Номенклатура 
	|		//ПОЛЕ_ТЧ_Характеристика
	|) КАК РезервыПоСделке
	|ПО 
	|	РезервыПоСделке.Номенклатура = Док.Номенклатура
	|	И Док.ДокументРезерва НЕ В (&МассивПустыхЗаказов)
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И РезервыПоСделке.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|	КПередаче.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И КПередаче.Качество = Док.Качество
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(," + УсловияТаблицыОстатков.Полное + "
	|			// Документ получения может быть только ордером, причем ордера без права продажи не учитываем,
	|       	// поскольку они уже учтены в регистре резервов
	|			И ДокументПолучения ССЫЛКА Документ.ПриходныйОрдерНаТовары
	|       	И НЕ ДокументПолучения.БезПраваПродажи) КАК КПолучению
	|ПО 
	|	КПолучению.Номенклатура = Док.Номенклатура
	| 	И (Док.ДокументРезерва = &ПустойОрдер ИЛИ НЕ Док.ДокументРезерва ССЫЛКА Документ.ПриходныйОрдерНаТовары)
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И КПолучению.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И КПолучению.Качество = Док.Качество
	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|	%ПОЛЕ_Док_Характеристика%,
	|	%ПОЛЕ_Док_Качество%,
	|	&Склад
	|
	|ИМЕЮЩИЕ 
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))
	|	- ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0)
	|	- ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)
	|	- ЕСТЬNULL(МАКСИМУМ(КПолучению.КоличествоОстаток), 0)
	|   + ЕСТЬNULL(МАКСИМУМ(РезервыПоСделке.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы"
	+ ?(ЕстьСерия, "
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	Док.СерияНоменклатуры	  КАК СерияНоменклатуры,
	|	%ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
	|	%ПОЛЕ_Док_Качество%       КАК Качество,
	|	&Склад         КАК Склад,
	|	%ПОЛЕ_Док_Количество%     КАК ДокументКоличество,
	|	0														КАК РезервыКоличество,
	|	0														КАК РезервыПоСделкеКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(КПолучению.КоличествоОстаток), 0)		КАК КПолучению,
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))			КАК ОстаткиКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)		КАК КПередачеКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|	ТоварыНаСкладахОстатки.Склад = &Склад
	|	И ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И ТоварыНаСкладахОстатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И ТоварыНаСкладахОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|	ТоварыВРозницеОстатки.Склад = &Склад
	|	И ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И ТоварыВРозницеОстатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И ТоварыВРозницеОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|	КПередаче.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Серия_Остатки// И КПередаче.СерияНоменклатуры = Док.СерияНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И КПередаче.Качество = Док.Качество
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(, " + УсловияТаблицыОстатков.Полное + "
	|		// Документ получения может быть только ордером, причем ордера без права продажи не учитываем,
	|       // поскольку они уже учтены в регистре резервов
	|		И ДокументПолучения ССЫЛКА Документ.ПриходныйОрдерНаТовары
	|       И НЕ ДокументПолучения.БезПраваПродажи) КАК КПолучению
	|ПО 
	|	КПолучению.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И КПолучению.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Серия_Остатки// И КПолучению.СерияНоменклатуры = Док.СерияНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И КПолучению.Качество = Док.Качество
	|	И (Док.ДокументРезерва = &ПустойОрдер ИЛИ Не Док.ДокументРезерва ССЫЛКА Документ.ПриходныйОрдерНаТовары)
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Док.СерияНоменклатуры <> &ПустаяСерия
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|	Док.СерияНоменклатуры,
	|	%ПОЛЕ_Док_Характеристика%,
	|	%ПОЛЕ_Док_Качество%,
	|	&Склад
	|
	|ИМЕЮЩИЕ
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))
	|	- ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)
	|	- ЕСТЬNULL(МАКСИМУМ(КПолучению.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|", "");*/
			//ТоварыКПередачеСоСкладовДополнитьТекстЗапроса(ТекстЗапроса, СтруктураПараметров, ЕстьХарактеристика, ЕстьСерия, ЕстьКачество, ЕстьКоэффициент, Ложь);
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				//СвободныйОстаток = Выборка.ОстаткиКоличество - Выборка.РезервыКоличество - Выборка.КПередачеКоличество - Выборка.КПолучению + Выборка.РезервыПоСделкеКоличество;
				/*СтрокаСообщения  = "Свободного остатка для резервирования " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(
				Выборка.НоменклатураПредставление, 
				?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""),
				?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
		" на складе """ + СокрЛП(Выборка.Склад) + """" +
		?(ЕстьКачество, " с качеством " + Выборка.Качество, "") + " недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, СвободныйОстаток, Выборка.ДокументКоличество,
			Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		// КонтрольСвободныхОстатков_Перемещение()
		// Контролируется возможность списания номенклатуры из свободного остатки под расходный ордер на товары.
		// Не допускается превышение свободного остатка по номенклатуре на складах.
		//
		// Контроль выполняется для документа "ПередачаТоваров"
		//	Заказ и склад в шапке.
		//	Наличие характеристики и серии зависит от таб.части.
		//	Качество отсутствует.
		//
		// Параметры:
		//  Нет
		//

		public void ТоварыКПередачеСоСкладовКонтрольСвободныхОстатков_ПередачаТоваров(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьХарактеристика  = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры")  <> Неопределено;
			//ЕстьСерия           = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры") <> Неопределено;
			//ЕстьКачество        = МетаданныеТабЧасти.Реквизиты.Найти("Качество")          <> Неопределено;
			//ЕстьКоэффициент     = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")       <> Неопределено;
			/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
			/*СтруктураУсловий = Новый Структура(
			"ЕстьХарактеристика,ЕстьКачество",
			ЕстьХарактеристика,
			ЕстьКачество);*/
			//СтруктураУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
			//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
			/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
			СтруктураПараметров.ИмяДокумента,
			СтруктураПараметров.ИмяТаблицы,
			Новый Структура("Полное,БезКачества"),
			СтруктураУсловий);*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка", СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ПустаяСерия"   , Справочники.СерииНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойОрдер",    Документы.ПриходныйОрдерНаТовары.ПустаяСсылка());
			//Запрос.УстановитьПараметр("Склад",          СтруктураШапкиДокумента.Склад);
			//Запрос.УстановитьПараметр("Сделка",         СтруктураШапкиДокумента.Заказ);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	Неопределено              КАК СерияНоменклатуры,
	|	%ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
	|	%ПОЛЕ_Док_Качество%       КАК Качество,
	|	&Склад                    КАК Склад,
	|	%ПОЛЕ_Док_Количество%     КАК ДокументКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0)       		КАК РезервыКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(РезервыПоСделке.КоличествоОстаток), 0)	КАК РезервыПоСделкеКоличество,
	|	0                                                      		КАК КПолучению,
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) 
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))            	КАК ОстаткиКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)			КАК КПередачеКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|	ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И ТоварыНаСкладахОстатки.Качество = Док.Качество
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|	ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И ТоварыВРозницеОстатки.Качество = Док.Качество
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(," + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Резервы.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, ДокументРезерва = &Сделка
	|		И " + УсловияТаблицыОстатков.БезКачества + ") КАК РезервыПоСделке
	|ПО 
	|	РезервыПоСделке.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И РезервыПоСделке.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|	КПередаче.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И КПередаче.Качество = Док.Качество
	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|	%ПОЛЕ_Док_Характеристика%,
	|	%ПОЛЕ_Док_Качество%
	|
	|ИМЕЮЩИЕ
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) 
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))
	|	- ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0)
	|	- ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)
	|	+ ЕСТЬNULL(МАКСИМУМ(РезервыПоСделке.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|"
	+ ?(ЕстьСерия, "
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	Док.СерияНоменклатуры	  КАК СерияНоменклатуры,
	|	%ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
	|	%ПОЛЕ_Док_Качество%       КАК Качество,
	|	&Склад                    КАК Склад,
	|	%ПОЛЕ_Док_Количество%     КАК ДокументКоличество,
	|	0                         КАК РезервыКоличество,
	|	0                         КАК РезервыПоСделкеКоличество,
	|	0                         КАК КПолучению,
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) 
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))            	КАК ОстаткиКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0) КАК КПередачеКоличество
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
	|ПО 
	|	ТоварыНаСкладахОстатки.Склад = &Склад
	|	И ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И ТоварыНаСкладахОстатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И ТоварыНаСкладахОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРознице.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
	|ПО 
	|	ТоварыВРозницеОстатки.Склад = &Склад
	|	И ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
	|	И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
	|	И ТоварыВРозницеОстатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
	|	И ТоварыВРозницеОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(," + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
	|ПО 
	|	Резервы.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
	|ПО 
	|	КПередаче.Номенклатура = Док.Номенклатура
	|	//СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
	|	//СОЕДИНЕНИЕ_Серия_Остатки// И КПередаче.СерияНоменклатуры = Док.СерияНоменклатуры
	|	//СОЕДИНЕНИЕ_Качество_Остатки// И КПередаче.Качество = Док.Качество
	|
	|ГДЕ
	|	Док.Ссылка = &ДокументСсылка
	|	И Док.СерияНоменклатуры <> &ПустаяСерия
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|	Док.СерияНоменклатуры,
	|	%ПОЛЕ_Док_Характеристика%,
	|	%ПОЛЕ_Док_Качество%
	|
	|ИМЕЮЩИЕ
	|	МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) 
	|		+ ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0)) 
	|	- ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|", "");*/
			//ТоварыКПередачеСоСкладовДополнитьТекстЗапроса(ТекстЗапроса, СтруктураПараметров, ЕстьХарактеристика, ЕстьСерия, ЕстьКачество, ЕстьКоэффициент, Ложь);
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				//СвободныйОстаток = Выборка.ОстаткиКоличество - Выборка.РезервыКоличество - Выборка.КПередачеКоличество - Выборка.КПолучению + Выборка.РезервыПоСделкеКоличество;
				/*СтрокаСообщения  = "Свободного остатка для резервирования " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(
				Выборка.НоменклатураПредставление, 
				?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""),
				?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
		" на складе """ + СокрЛП(Выборка.Склад) + """" +
		?(ЕстьКачество, " с качеством " + Выборка.Качество, "") + " недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, СвободныйОстаток, Выборка.ДокументКоличество,
			Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
			}
			//;;
		}
		// КонтрольСвободныхОстатков_ПередачаТоваров()
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ТоварыВНТТ
		// Процедура контролирует остаток по переданному документу и его табличной части.
		// В случае недостатка товаров выставляется флаг отказа и выдается сообщегние.
		//
		// Параметры:
		//  ИмяТабличнойЧасти			- строка, имя табличной части, которая проводится по регистру,
		//  СтруктураШапкиДокумента		- структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  ОтказПроведения				- флаг отказа в проведении,
		//  ЗаголовокСообщения			- строка, заголовок сообщения об ошибке проведения.
		//

		public void ТоварыВНТТКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			//МетаданныеДокумента = СтруктураШапкиДокумента.Ссылка.Метаданные();
			//ИмяДокумента        = МетаданныеДокумента.Имя;
			//ИмяТаблицы          = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			//ЕстьСерия           = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СерияНоменклатуры", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьХарактеристика  = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ХарактеристикаНоменклатуры", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьЦена            = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Цена", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСкладВТабЧасти  = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Склад", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьКоэффициент     = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Коэффициент", МетаданныеДокумента, ИмяТабличнойЧасти);
			if(true/*ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЦенаВРозницеСтарая", МетаданныеДокумента, ИмяТабличнойЧасти)*/)
			{
				//ИмяПоляЦены = "ЦенаВРозницеСтарая";
			}
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			/*ТекстЗапросаСписокНоменклатуры = "
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Номенклатура 
	|ИЗ
	|	Документ." + ИмяТаблицы +"
	|ГДЕ Ссылка = &ДокументСсылка";*/
			/*//Текст запроса для получения розничной цены
*/
			if(true/*НЕ ЗначениеЗаполнено(ИмяПоляЦены)*/)
			{
				//ТекстЗапросаРознЦена = "";
			}
			/*//Текст вложенного запроса для выборки полей документа
*/
			/*// остатки по услугам контролировать не надо.
*/
			/*+ ?(ЕстьСкладВТабЧасти, "
	|	И Док.Склад.ВидСклада = &НТТ"
	, "") + "
	|) КАК Док";*/
			//Запрос = Новый Запрос;
			/*// Для перемещения надо проверять по складу "Склад-отправитель", а для остальных документов - просто "Склад"
*/
			//ТекСклад = СтруктураШапкиДокумента.Склад;
			if(true/*ЕстьСкладВТабЧасти*/)
			{
				//ЗапросСклады = новый Запрос;
				/*ЗапросСклады.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ Склад ИЗ Документ."+ИмяТаблицы+"
		|ГДЕ Ссылка=&ДокументСсылка";*/
				//ЗапросСклады.УстановитьПараметр("ДокументСсылка",СтруктураШапкиДокумента.Ссылка);
				//СписокСкладов = ЗапросСклады.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");
			}
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка", СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("Склад", текСклад);
			//Запрос.УстановитьПараметр("СписокСкладов", СписокСкладов);
			//Запрос.УстановитьПараметр("НТТ", Перечисления.ВидыСкладов.НТТ);
			if(true/*ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				//ПараметрЗапросаТоварТара = Перечисления.ТоварТара.Тара;
				//ИмяПоляЦены = "";
			}
			//Запрос.УстановитьПараметр("ТоварТара", ПараметрЗапросаТоварТара);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,"
	+ ?(ЕстьХарактеристика, "
	|	Док.ХарактеристикаНоменклатуры				           КАК ХарактеристикаНоменклатуры,"
	,"")
	+ ?(ЕстьСерия, "
	|	Док.СерияНоменклатуры			                       КАК СерияНоменклатуры,"
	,"")
	+ ?(ЗначениеЗаполнено(ИмяПоляЦены), "
	|   Док." + ИмяПоляЦены + "                                КАК ЦенаВРознице, "
	,"
	|   0                                                      КАК ЦенаВРознице,")
	+ ?(Не ЕстьСкладВТабЧасти, "
	|   &Склад                                                 КАК Склад, ", "
	|   Док.Склад,")
	+ ?(ЕстьКоэффициент, "
	|	СУММА(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) КАК ДокументКоличество,", "
	|	СУММА(Док.Количество)                                  КАК ДокументКоличество,") + "
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)       КАК ОстатокКоличество
	|ИЗ "+ТекстЗапросаРеквизитыДокумента+"
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыВНТТ.Остатки(,
	|		Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ") 
	|	И Склад в (&СписокСкладов) 
	|	И ТоварТара = &ТоварТара
	|	) КАК Остатки
	|ПО 
	|	Док.Номенклатура                = Остатки.Номенклатура"
	+ ?(ЕстьХарактеристика, "
	| И Док.ХарактеристикаНоменклатуры  = Остатки.ХарактеристикаНоменклатуры"
	,"")
	+ ?(ЕстьСерия, "
	| И Док.СерияНоменклатуры           = Остатки.СерияНоменклатуры"
	,"")
	+ ?(ЗначениеЗаполнено(ИмяПоляЦены), "
	| И Док." + ИмяПоляЦены + "         = Остатки.ЦенаВРознице"
	,"")
	+ ?(ЕстьСкладВТабЧасти, "
	| И Док.Склад                       = Остатки.Склад "
	, "") + "
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура"
	+ ?(ЕстьХарактеристика, ",
	|	Док.ХарактеристикаНоменклатуры"
	,"")
	+ ?(ЕстьСерия, ",
	|	Док.СерияНоменклатуры"
	,"")
	+ ?(ЗначениеЗаполнено(ИмяПоляЦены), "
	|  , Док." + ИмяПоляЦены 
	,"") 
	+ ?(ЕстьСкладВТабЧасти, ",
	|   Док.Склад", "") + "
	
	|
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < " + ?(ЕстьКоэффициент, "СУММА(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент)", "СУММА(Док.Количество)") + "
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВНТТ.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ
			|Док.Номенклатура КАК Номенклатура"
			+ ?(ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры ","")
			+ ?(ЕстьСкладВТабЧасти, ", Док.Склад КАК Склад","") + "
			|ИЗ Документ." + ИмяТаблицы + " КАК Док
			|ГДЕ 
			|	Док.Ссылка  =  &ДокументСсылка 
			|	И НЕ Док.Номенклатура.Услуга"
			+ ?(ЕстьСкладВТабЧасти, " И Док.Склад.ВидСклада = &НТТ", "");*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыВНТТ"
				,РезультатЗапросаДляБлокировки);*/
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура", "Номенклатура");
					if(true/*ЕстьХарактеристика*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//СтруктураЗначенийБлокировки = Новый Структура("ТоварТара", ПараметрЗапросаТоварТара);
					if(true/*ЕстьСкладВТабЧасти*/)
					{
						//СтруктураИсточникаДанных.Вставить("Склад","Склад");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, ОтказПроведения, ЗаголовокСообщения);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "Остатка " + 
		УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
								  ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""),
								  ?(ЕстьСерия, Выборка.СерияНоменклатуры,"")) +
		" на складе """ + СокрЛП(Выборка.Склад) + """ по цене " + Выборка.ЦенаВРознице + 
		" недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокКоличество, Выборка.ДокументКоличество,
		Выборка.ЕдиницаХраненияОстатковПредставление, ОтказПроведения, ЗаголовокСообщения);*/
			}
			//;;
		}
		// КонтрольОстатков()
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ТоварыКПеремещениюВНТТ
		// Процедура контролирует остаток по переданному документу и его табличной части.
		// В случае недостатка товаров выставляется флаг отказа и выдается сообщегние.
		//
		// Параметры:
		//  ИмяТабличнойЧасти			- строка, имя табличной части, которая проводится по регистру,
		//  СтруктураШапкиДокумента		- структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  ОтказПроведения				- флаг отказа в проведении,
		//  ЗаголовокСообщения			- строка, заголовок сообщения об ошибке проведения.
		//

		public void ТоварыКПеремещениюВНТТКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			//МетаданныеДокумента = СтруктураШапкиДокумента.Ссылка.Метаданные();
			//ИмяДокумента        = МетаданныеДокумента.Имя;
			//ИмяТаблицы          = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			//ЕстьСерия           = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СерияНоменклатуры", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьХарактеристика  = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ХарактеристикаНоменклатуры", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьЦена            = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Цена", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСкладВТабЧасти  = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Склад", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьКоэффициент     = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Коэффициент", МетаданныеДокумента, ИмяТабличнойЧасти);
			if(true/*ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЦенаВРозницеСтарая", МетаданныеДокумента, ИмяТабличнойЧасти)*/)
			{
				//ИмяПоляЦены = "ЦенаВРозницеСтарая";
			}
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			/*ТекстЗапросаСписокНоменклатуры = "
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Номенклатура 
	|ИЗ
	|	Документ." + ИмяТаблицы +"
	|ГДЕ Ссылка = &ДокументСсылка";*/
			/*//Текст вложенного запроса для выборки полей документа
*/
			/*// остатки по услугам контролировать не надо.
*/
			/*+ ?(ЕстьСкладВТабЧасти, "
	|	И Док.Склад.ВидСклада = &НТТ"
	, "") + "
    |) КАК Док ";*/
			//Запрос = Новый Запрос;
			/*// Для перемещения надо проверять по складу "Склад-отправитель", а для остальных документов - просто "Склад"
*/
			//ТекСклад = СтруктураШапкиДокумента.Склад;
			if(true/*ЕстьСкладВТабЧасти*/)
			{
				//ЗапросСклады = новый Запрос;
				/*ЗапросСклады.Текст = "Выбрать различные Склад ИЗ Документ."+ИмяТаблицы+"
		|ГДЕ Ссылка=&ДокументСсылка";*/
				//ЗапросСклады.УстановитьПараметр("ДокументСсылка",СтруктураШапкиДокумента.Ссылка);
				//СписокСкладов = ЗапросСклады.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");
			}
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка", СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("Склад", ТекСклад);
			//Запрос.УстановитьПараметр("СписокСкладов", СписокСкладов);
			//Запрос.УстановитьПараметр("НТТ", Перечисления.ВидыСкладов.НТТ);
			if(true/*ИмяТабличнойЧасти = "ВозвратнаяТара"*/)
			{
				//ПараметрЗапросаТоварТара = Перечисления.ТоварТара.Тара;
			}
			//Запрос.УстановитьПараметр("ТоварТара", ПараметрЗапросаТоварТара);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,"
	+ ?(ЕстьХарактеристика, "
	|	Док.ХарактеристикаНоменклатуры				           КАК ХарактеристикаНоменклатуры,"
	,"")
	+ ?(ЕстьСерия, "
	|	Док.СерияНоменклатуры			                       КАК СерияНоменклатуры,"
	,"")
	+ ?(ЗначениеЗаполнено(ИмяПоляЦены), "
	|   Док." + ИмяПоляЦены + "                                КАК ЦенаВРознице, "
	,"
	|   0                                                      КАК ЦенаВРознице,")
	+ ?(Не ЕстьСкладВТабЧасти, "
	|   &Склад                                                 КАК Склад, ", "
	|   Док.Склад,")
	+ ?(ЕстьКоэффициент, "
	|	СУММА(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) КАК ДокументКоличество,", "
	|	СУММА(Док.Количество)                                  КАК ДокументКоличество,") + "
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)       КАК ОстатокКоличество
	|ИЗ "+ТекстЗапросаРеквизитыДокумента+"
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПеремещениюВНТТ.Остатки(, Склад в (&СписокСкладов) И
	|		Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ") 
	|	И ТоварТара = &ТоварТара
	|	) КАК Остатки
	|ПО 
	|	Док.Номенклатура                = Остатки.Номенклатура"
	+ ?(ЕстьХарактеристика, "
	| И Док.ХарактеристикаНоменклатуры  = Остатки.ХарактеристикаНоменклатуры"
	,"")
	+ ?(ЕстьСерия, "
	| И Док.СерияНоменклатуры           = Остатки.СерияНоменклатуры"
	,"")
	+ ?(ЗначениеЗаполнено(ИмяПоляЦены), "
	| И Док." + ИмяПоляЦены + "         = Остатки.ЦенаВРознице"
	,"")
	+ ?(ЕстьСкладВТабЧасти, "
	| И Док.Склад                       = Остатки.Склад "
	, "") + "
	|
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура"
	+ ?(ЕстьХарактеристика, ",
	|	Док.ХарактеристикаНоменклатуры"
	,"")
	+ ?(ЕстьСерия, ",
	|	Док.СерияНоменклатуры"
	,"")
	+ ?(ЗначениеЗаполнено(ИмяПоляЦены), "
	|  , Док." + ИмяПоляЦены 
	,"") 
	+ ?(ЕстьСкладВТабЧасти, ",
	|   Док.Склад", "") + "
	
	|
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < " 
	+ ?(ЕстьКоэффициент, "СУММА(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент)",
						 "СУММА(Док.Количество)") + "
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыКПеремещениюВНТТ.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ Док.Номенклатура КАК Номенклатура"
			+ ?(ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры", "")
			+ ?(ЕстьСкладВТабЧасти, ", Док.Склад КАК Склад", "") + "
			|ИЗ Документ." + ИмяТаблицы + " КАК Док
			|ГДЕ
			|	Док.Ссылка  =  &ДокументСсылка 
			|	И Не Док.Номенклатура.Услуга"
			+ ?(ЕстьСкладВТабЧасти, " И Док.Склад.ВидСклада = &НТТ", "");*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыКПеремещениюВНТТ"
				,РезультатЗапросаДляБлокировки);*/
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура", "Номенклатура");
					if(true/*ЕстьХарактеристика*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//СтруктураЗначенийБлокировки = Новый Структура("ТоварТара", ПараметрЗапросаТоварТара);
					if(true/*ЕстьСкладВТабЧасти*/)
					{
						//СтруктураИсточникаДанных.Вставить("Склад","Склад");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, ОтказПроведения, ЗаголовокСообщения);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "Остатка " + 
		УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
								  ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""),
								  ?(ЕстьСерия, Выборка.СерияНоменклатуры,"")) +
		" к перемещению на склад """ + СокрЛП(Выборка.Склад) + """ по цене " + Выборка.ЦенаВРознице + 
		" недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокКоличество, Выборка.ДокументКоличество,
		Выборка.ЕдиницаХраненияОстатковПредставление, ОтказПроведения, ЗаголовокСообщения);*/
			}
			//;;
		}
		// КонтрольОстатков()
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ТоварыПолученные
		// Процедура контролирует остаток по переданному документу и его табличной части.
		// В случае недостатка товаров выставляется флаг отказа и выдается сообщение.
		//
		// Параметры:
		//  ИмяТабличнойЧасти			- строка, имя табличной части, которая проводится по регистру,
		//  СтруктураШапкиДокумента		- структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  СтатусПолучения             - ПеречислениеСсылка.СтатусыПолученияПередачиТоваров,
		//  Отказ             			- флаг отказа в проведении,
		//  Заголовок					- строка, заголовок сообщения об ошибке проведения.
		//

		public void ТоварыПолученныеКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, СтатусПолучения, ОтказПроведения, ЗаголовокСообщения, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			//МетаданныеДокумента = СтруктураШапкиДокумента.Ссылка.Метаданные();
			//ИмяДокумента        = МетаданныеДокумента.Имя;
			//ИмяТаблицы          = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			//ЕстьСерия           = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СерияНоменклатуры", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьХарактеристика  = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ХарактеристикаНоменклатуры", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьКоэффициент     = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Коэффициент", МетаданныеДокумента, ИмяТабличнойЧасти);
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			/*ТекстЗапросаСписокНоменклатуры = "
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Номенклатура 
		|ИЗ
		|	Документ." + ИмяТаблицы + "
		|ГДЕ
		|	Ссылка = &ДокументСсылка";*/
			//Запрос = Новый Запрос;
			//ЗаказНаПереработку = Ложь;
			if(true/*ТипЗнч(СтруктураШапкиДокумента.Сделка) = Тип("ДокументСсылка.ЗаказПокупателя")*/)
			{
				//ЗаказНаПереработку = (СтруктураШапкиДокумента.Сделка.ВидОперации = Перечисления.ВидыОперацийЗаказПокупателя.Переработка);
			}
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",     СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ДоговорКонтрагента", СтруктураШапкиДокумента.ДоговорКонтрагента);
			if(true/*СтруктураШапкиДокумента.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом
		И НЕ ЗаказНаПереработку*/)
			{
				//ПараметрЗапросаСделка = Неопределено;
			}
			//Запрос.УстановитьПараметр("Сделка",          ПараметрЗапросаСделка);
			//Запрос.УстановитьПараметр("СтатусПолучения", СтатусПолучения);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|   %ПОЛЕ_Док_Характеристика%                              КАК ХарактеристикаНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%)               КАК ХарактеристикаНоменклатурыПредставление,
	|   %ПОЛЕ_Док_Серия%                                       КАК СерияНоменклатуры,
	|	ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%)                        КАК СерияНоменклатурыПредставление,
	|	%ПОЛЕ_Док_Количество%                                  КАК ДокументКоличество,
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)       КАК ОстатокКоличество
	|ИЗ 
	|	Документ." + ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыПолученные.Остатки(,
	|		Номенклатура В (%ВыборкаПоНоменклатуре%)
	|		И ДоговорКонтрагента = &ДоговорКонтрагента
	|		И Сделка             = &Сделка
	|		И СтатусПолучения    = &СтатусПолучения
	|	) КАК Остатки
	|ПО 
	|	Док.Номенклатура                = Остатки.Номенклатура
	|   // СОЕДИНЕНИЕ_Характеристика_Остатки
	|   // СОЕДИНЕНИЕ_Серия_Остатки
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|
	|СГРУППИРОВАТЬ ПО
	|	Док.Номенклатура,
	|   %ПОЛЕ_Док_Характеристика%,
	|   %ПОЛЕ_Док_Серия%
	|
	|ИМЕЮЩИЕ
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
	|
	|ДЛЯ ИЗМЕНЕНИЯ
	|	РегистрНакопления.ТоварыПолученные.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			if(true/*ЕстьХарактеристика*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Характеристика%",            "Док.ХарактеристикаНоменклатуры");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// СОЕДИНЕНИЕ_Характеристика_Остатки", " И Док.ХарактеристикаНоменклатуры = Остатки.ХарактеристикаНоменклатуры");
			}
			if(true/*ЕстьСерия*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Серия%",            "Док.СерияНоменклатуры");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// СОЕДИНЕНИЕ_Серия_Остатки", " И Док.СерияНоменклатуры = Остатки.СерияНоменклатуры");
			}
			/*ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Количество%", ?(ЕстьКоэффициент,
		"СУММА(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент)",
		"СУММА(Док.Количество)"));*/
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ВыборкаПоНоменклатуре%", ТекстЗапросаСписокНоменклатуры);
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ
			|Док.Номенклатура КАК Номенклатура"
			+ ?(ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры ","")
			+ "
			|ИЗ 
			|	Документ." + ИмяТаблицы + " КАК Док
			|
			|ГДЕ 
			|	Док.Ссылка  =  &ДокументСсылка";*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыПолученные"
				,РезультатЗапросаДляБлокировки);*/
					/*СтруктураЗначенийБлокировки = Новый Структура(
				"ДоговорКонтрагента, СтатусПолучения" 
				, СтруктураШапкиДокумента.ДоговорКонтрагента
				, СтатусПолучения);*/
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура", "Номенклатура");
					if(true/*ЕстьХарактеристика*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, ОтказПроведения, ЗаголовокСообщения);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "Остатка " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
									  ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатурыПредставление, ""),
									  ?(ЕстьСерия, Выборка.СерияНоменклатурыПредставление, "")) +
			" полученного по договору """ + СокрЛП(СтруктураШапкиДокумента.ДоговорКонтрагента) + ?(НЕ ЗначениеЗаполнено(СтруктураШапкиДокумента.Сделка), "",
			" и по сделке " + СокрЛП(СтруктураШапкиДокумента.Сделка)) +
			""" недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокКоличество, Выборка.ДокументКоличество,
			Выборка.ЕдиницаХраненияОстатковПредставление, ОтказПроведения, ЗаголовокСообщения);*/
			}
			//;;
		}
		// КонтрольОстатков()
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ТоварыПереданные
		// Процедура контролирует остаток по данному регистру по переданному документу
		// и его табличной части. В случае недостатка товаров выставляется флаг отказа и
		// выдается сообщегние.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  ИмяТабличнойЧасти - строка, имя табличной части, которая проводится по регистру,
		//  СтруктураШапкиДокумента - структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  Отказ             - флаг отказа в проведении,
		//  Заголовок         - строка, заголовок сообщения об ошибке проведения.
		//

		public void ТоварыПереданныеКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, СтатусПередачи, ОтказПроведения, ЗаголовокСообщения, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			//Отказ     = ОтказПроведения;
			//Заголовок = ЗаголовокСообщения;
			//ЭтоРеализацияОтгруженныхТоваров = (ТипЗнч(СтруктураШапкиДокумента.Ссылка) = Тип("ДокументСсылка.РеализацияОтгруженныхТоваров"));
			if(true/*ЭтоРеализацияОтгруженныхТоваров*/)
			{
				//МетаданныеДокумента = СтруктураШапкиДокумента.ДокументОтгрузки.Метаданные();
				//ИмяДокумента        = "РеализацияОтгруженныхТоваров";
				//ИмяТаблицы          = "РеализацияТоваровУслуг." + СокрЛП(ИмяТабличнойЧасти);
			}
			if(true/*ИмяТабличнойЧасти <> ""*/)
			{
				//МетаданныеТабЧасти = МетаданныеДокумента.ТабличныеЧасти[ИмяТабличнойЧасти];
			}
			//СтруктураПараметров = Новый Структура;
			//СтруктураПараметров.Вставить("МетаданныеДокумента",	МетаданныеДокумента);
			//СтруктураПараметров.Вставить("ИмяДокумента", 		ИмяДокумента);
			//СтруктураПараметров.Вставить("ИмяТабличнойЧасти", 	ИмяТабличнойЧасти);
			//СтруктураПараметров.Вставить("ИмяТаблицы", 			ИмяТаблицы);
			//СтруктураПараметров.Вставить("СтатусПередачи", 		СтатусПередачи);
			if(true/*СтруктураПараметров.ИмяДокумента = "ВозвратТоваровОтПокупателя"*/)
			{
				//ТоварыПереданныеКонтрольОстатков_ВозвратТоваровОтПокупателя(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
			}
			//ОтказПроведения     = Отказ;
			//ЗаголовокСообщения = Заголовок;
		}
		// КонтрольОстатков()
		// Процедура контролирует остаток по данному регистру по переданному документу
		// и его табличной части. В случае недостатка товаров выставляется флаг отказа и
		// выдается сообщегние.
		//
		// При контроле предполагается что сделка (заказ) расположены в шапке документа.
		//

		public void ТоварыПереданныеКонтрольОстатков_ЗаказВШапке(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьСуммаВключаетНДС = (СтруктураПараметров.МетаданныеДокумента.Реквизиты.Найти("СуммаВключаетНДС") <> Неопределено);
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = ""*/)
			{
				/*//возможно в случае Комплектация / Поступление от переработчика / Разборка
*/
				//ЕстьСерия            = истина;
				//ЕстьХарактеристика   = истина;
				//ЕстьКоэффициент      = истина;
				//ИмяСуммы = "СуммаПередачи";
			}
			if(true/*СтруктураПараметров.ИмяДокумента = "КомплектацияНоменклатуры"*/)
			{
				//ИмяЗаказа = "ЗаказВыпуска";
			}
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			/*ТекстЗапросаСписокНоменклатуры = "
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Номенклатура 
	|ИЗ
	|	Документ." + СтруктураПараметров.ИмяТаблицы +"
	|ГДЕ Ссылка = &ДокументСсылка";*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",     СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ДоговорКонтрагента", СтруктураШапкиДокумента.ДоговорКонтрагента);
			if(true/*НЕ ЗначениеЗаполнено(СтруктураШапкиДокумента[ИмяЗаказа])*/)
			{
				//ПараметрЗапросаСделка = Неопределено;
			}
			//Запрос.УстановитьПараметр("Сделка", ПараметрЗапросаСделка);
			//Запрос.УстановитьПараметр("СтатусПередачи",      СтруктураПараметров.СтатусПередачи);
			if(true/*СтруктураПараметров.ИмяДокумента = "КомплектацияНоменклатуры"*/)
			{
				//мВалютаВзаиморасчетов = СтруктураШапкиДокумента.ДоговорКонтрагента.ВалютаВзаиморасчетов;
			}
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,"
	+ ?(ЕстьХарактеристика, "
	|	Док.ХарактеристикаНоменклатуры           КАК ХарактеристикаНоменклатуры,"
	,"")
	+ ?(ЕстьСерия, "
	|	Док.СерияНоменклатуры                    КАК СерияНоменклатуры,"
	,"")
	+ ?(ЕстьКоэффициент, "
	|	СУММА(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) КАК ДокументКоличество,", "
	|	СУММА(Док.Количество)                                  		КАК ДокументКоличество,") + "
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)       		КАК ОстатокКоличество,
	|	СУММА(ВЫРАЗИТЬ(" + ИмяСуммы + " КАК Число(15,2)))      		КАК ДокументСумма, 
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.СуммаВзаиморасчетовОстаток), 0)	КАК ОстатокСумма
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыПереданные.Остатки(,
	|		Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ")
	|	И ДоговорКонтрагента = &ДоговорКонтрагента
	|   И Сделка                = &Сделка
	|	И СтатусПередачи        = &СтатусПередачи
	|	) КАК Остатки
	|ПО 
	|	Док.Номенклатура                = Остатки.Номенклатура"
	+ ?(ЕстьХарактеристика, "
	| И Док.ХарактеристикаНоменклатуры  = Остатки.ХарактеристикаНоменклатуры"
	,"")
	+ ?(ЕстьСерия, "
	| И Док.СерияНоменклатуры  = Остатки.СерияНоменклатуры"
	,"") + "
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура"
	+ ?(ЕстьХарактеристика, "
	|	, Док.ХарактеристикаНоменклатуры "
	,"")
	+ ?(ЕстьСерия, "
	|	, Док.СерияНоменклатуры "
	,"") + "
	|	
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < СУММА(Док.Количество)
	| ИЛИ  ЕСТЬNULL(МАКСИМУМ(Остатки.СуммаВзаиморасчетовОстаток), 0) < СУММА(" + ИмяСуммы + ")
	|	
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыПереданные.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ
			|Док.Номенклатура КАК Номенклатура"
			+ ?(ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры ","")
			+ "
			|ИЗ 
			|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
			|
			|ГДЕ 
			|	Док.Ссылка  =  &ДокументСсылка";*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыПереданные"
				,РезультатЗапросаДляБлокировки);*/
					/*СтруктураЗначенийБлокировки = Новый Структура(
				"ДоговорКонтрагента, СтатусПередачи"
				, СтруктураШапкиДокумента.ДоговорКонтрагента
				, СтруктураПараметров.СтатусПередачи);*/
					if(true/*ПараметрЗапросаСделка <> Неопределено*/)
					{
						//СтруктураЗначенийБлокировки.Вставить("Сделка", ПараметрЗапросаСделка);
					}
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура", "Номенклатура");
					if(true/*ЕстьХарактеристика*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, Отказ, Заголовок);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*//КоличествоОстаток = ?(Выборка.ОстатокКоличество = NULL, 0, Выборка.ОстатокКоличество);
*/
				if(true/*Выборка.ОстатокКоличество < Выборка.ДокументКоличество*/)
				{
					/*СтрокаСообщения = "Остатка " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
			                          ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""), ?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
			" переданного по договору """ + СокрЛП(СтруктураШапкиДокумента.ДоговорКонтрагента) + ?(НЕ ЗначениеЗаполнено(СтруктураШапкиДокумента[ИмяЗаказа]), "",
			" и по заказу " + СокрЛП(СтруктураШапкиДокумента[ИмяЗаказа])) +
			""" недостаточно.";*/
					/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокКоличество, Выборка.ДокументКоличество,
			Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
				}
				/*//СуммаОстаток = ?(Выборка.ОстатокСумма = NULL, 0, Выборка.ОстатокСумма);
*/
				if(true/*Выборка.ОстатокСумма < Выборка.ДокументСумма*/)
				{
					/*СтрокаСообщения = "Остатка суммы взаиморасчетов по товару " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
			                          ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""), ?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
			" переданному по договору """ + СокрЛП(СтруктураШапкиДокумента.ДоговорКонтрагента) + ?(НЕ ЗначениеЗаполнено(СтруктураШапкиДокумента[ИмяЗаказа]), "",
			" и по заказу " + СокрЛП(СтруктураШапкиДокумента[ИмяЗаказа])) +
			""" недостаточно.";*/
					/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокСумма, Выборка.ДокументСумма, 
			мВалютаВзаиморасчетов, Отказ, Заголовок);*/
				}
			}
			//;;
		}
		// КонтрольОстатков()
		// Процедура контролирует остаток по данному регистру по переданному документу
		// и его табличной части. В случае недостатка товаров выставляется флаг отказа и
		// выдается сообщегние.
		//
		// При контроле предполагается что сделка (заказ) расположены в табличной части документа.
		//

		public void ТоварыПереданныеКонтрольОстатков_ВозвратТоваровОтПокупателя(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьСерия                = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры")          <> Неопределено;
			//ЕстьХарактеристика       = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры") <> Неопределено;
			//ЕстьКоэффициент          = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент")                <> Неопределено;
			//ЕстьСуммаВключаетНДС     = СтруктураПараметров.МетаданныеДокумента.Реквизиты.Найти("СуммаВключаетНДС")      <> Неопределено;
			if(true/*СтруктураПараметров.МетаданныеДокумента.Реквизиты.Найти("Заказ") <> Неопределено*/)
			{
				//ИмяЗаказа = "Заказ";
			}
			/*// Для документ "Переоценка товаров, отданных на комиссию" должен контролировать реквизит "Сумма старая",
*/
			/*// остальные документы - "Сумма".
*/
			//ИмяСуммы = "Док.Сумма";
			if(true/*СтруктураПараметров.ИмяТабличнойЧасти = "Товары"*/)
			{
				if(true/*ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СуммаСтарая", СтруктураПараметров.МетаданныеДокумента, СтруктураПараметров.ИмяТабличнойЧасти)*/)
				{
					//ИмяСуммыНДС = "";
				}
				//ИмяСуммы    = ?(ЕстьСуммаВключаетНДС И Не СтруктураШапкиДокумента.СуммаВключаетНДС И Не ПустаяСтрока(ИмяСуммыНДС), "(" + ИмяСуммы + "+" + ИмяСуммыНДС + ")", ИмяСуммы);
			}
			//ИмяСуммы = ИмяСуммы + " * &КратностьВзаиморасчетов * &КурсДокумента / &КурсВзаиморасчетов / &КратностьДокумента";
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			/*ТекстЗапросаСписокНоменклатуры = "
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Номенклатура 
	|ИЗ
	|	Документ." + СтруктураПараметров.ИмяТаблицы + "
	|ГДЕ Ссылка = &ДокументСсылка";*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",          СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("ДоговорКонтрагента",      СтруктураШапкиДокумента.ДоговорКонтрагента);
			//Запрос.УстановитьПараметр("СтатусПередачи",          СтруктураПараметров.СтатусПередачи);
			//Запрос.УстановитьПараметр("КурсДокумента",           ЗаполнениеДокументов.КурсДокумента(СтруктураШапкиДокумента.Ссылка, глЗначениеПеременной("ВалютаРегламентированногоУчета")));
			//Запрос.УстановитьПараметр("КратностьДокумента",      ЗаполнениеДокументов.КратностьДокумента(СтруктураШапкиДокумента.Ссылка, глЗначениеПеременной("ВалютаРегламентированногоУчета")));
			//Запрос.УстановитьПараметр("КурсВзаиморасчетов",      СтруктураШапкиДокумента.КурсВзаиморасчетов);
			//Запрос.УстановитьПараметр("КратностьВзаиморасчетов", СтруктураШапкиДокумента.КратностьВзаиморасчетов);
			//Запрос.УстановитьПараметр("Сделка",                  СтруктураШапкиДокумента.Сделка);
			//ПустыеЗаказы = ОбщегоНазначения.МассивПустыхЗначений(МетаданныеТабЧасти.Реквизиты.ЗаказПокупателя.Тип);
			//Запрос.УстановитьПараметр("ПустыеЗаказы", ПустыеЗаказы);
			/*ТекстЗапроса = "
		|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
		|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
		|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
		|	//СТРОКАЗАКАЗА 
		|	//СТРОКАПРЕДСТАВЛЕНИЯЗАКАЗА 
		|	%ПОЛЕ_Док_Характеристика%    КАК ХарактеристикаНоменклатуры,
		|	%ПОЛЕ_Док_СерияНоменклатуры% КАК СерияНоменклатуры,
		|	%ПОЛЕ_Док_Количество%        КАК ДокументКоличество,
		|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)       		КАК ОстатокКоличество,
		|	СУММА(ВЫРАЗИТЬ(" + ИмяСуммы + " КАК Число(15,2)))      		КАК ДокументСумма, 
		|	ЕСТЬNULL(МАКСИМУМ(Остатки.СуммаВзаиморасчетовОстаток), 0)	КАК ОстатокСумма
		|ИЗ 
		|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
		|
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыПереданные.Остатки(,
		|		Номенклатура В (%ВыборкаПоНоменклатуре%)
		|		И ДоговорКонтрагента = &ДоговорКонтрагента
		|		И СтатусПередачи     = &СтатусПередачи) КАК Остатки
		|ПО 
		|	Док.Номенклатура = Остатки.Номенклатура
		|	//СОЕДИНЕНИЕ_Заказ_Остатки
		|	//СОЕДИНЕНИЕ_Характеристика_Остатки
		|	//СОЕДИНЕНИЕ_Серия_Остатки
		|
		|ГДЕ
		|	Док.Ссылка = &ДокументСсылка
		|
		|СГРУППИРОВАТЬ ПО
		|	Док.Номенклатура,
		|	%ПОЛЕ_Док_Заказ%
		|	%ПОЛЕ_Док_Характеристика%,
		|	%ПОЛЕ_Док_СерияНоменклатуры%
		|	
		|//ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < СУММА(Док.Количество)
		|// ИЛИ  ЕСТЬNULL(МАКСИМУМ(Остатки.СуммаВзаиморасчетовОстаток), 0) < СУММА(" + ИмяСуммы + ")
		|	
		|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыПереданные.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
		|";*/
			/*// Преобразуем текст запроса
*/
			//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ВыборкаПоНоменклатуре%",  ТекстЗапросаСписокНоменклатуры);
			/*ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Количество%",    ?(ЕстьКоэффициент,
						"СУММА(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент)",
						"СУММА(Док.Количество)"));*/
			if(true/*ЕстьХарактеристика*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Характеристика%",           "Док.ХарактеристикаНоменклатуры");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//СОЕДИНЕНИЕ_Характеристика_Остатки", "И Док.ХарактеристикаНоменклатуры = Остатки.ХарактеристикаНоменклатуры");
			}
			if(true/*ЕстьСерия*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_СерияНоменклатуры%", "Док.СерияНоменклатуры");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//СОЕДИНЕНИЕ_Серия_Остатки",   "И Док.СерияНоменклатуры = Остатки.СерияНоменклатуры");
			}
			if(true/*СтруктураШапкиДокумента.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом*/)
			{
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//СОЕДИНЕНИЕ_Заказ_Остатки", " И ВЫБОР КОГДА Док.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка) ТОГДА Неопределено ИНАЧЕ Док.ЗаказПокупателя КОНЕЦ = Остатки.Сделка");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//СТРОКАЗАКАЗА"," Док.ЗаказПокупателя КАК Заказ,");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//СТРОКАПРЕДСТАВЛЕНИЯЗАКАЗА", "ПРЕДСТАВЛЕНИЕ(Док.ЗаказПокупателя) КАК ЗаказПредставление,");
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Заказ%", " Док.ЗаказПокупателя,");
			}
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ
			|Док.Номенклатура КАК Номенклатура"
			+ ?(ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры ","")
			+ "
			|ИЗ 
			|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
			|
			|ГДЕ 
			|	Док.Ссылка  =  &ДокументСсылка";*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыПереданные"
				,РезультатЗапросаДляБлокировки);*/
					/*СтруктураЗначенийБлокировки = Новый Структура(
				"ДоговорКонтрагента, СтатусПередачи"
				, СтруктураШапкиДокумента.ДоговорКонтрагента
				, СтруктураПараметров.СтатусПередачи);*/
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура", "Номенклатура");
					if(true/*ЕстьХарактеристика*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, Отказ, Заголовок);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*//КоличествоОстаток = ?(Выборка.ОстатокКоличество = NULL, 0, Выборка.ОстатокКоличество);
*/
				if(true/*Выборка.ОстатокКоличество < Выборка.ДокументКоличество*/)
				{
					/*СтрокаСообщения = "Остатка " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
			                          ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""), ?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
			" переданного по договору """ + СокрЛП(СтруктураШапкиДокумента.ДоговорКонтрагента) + ?(НЕ ЗначениеЗаполнено(Выборка.Заказ), "", " и по заказу " + Выборка.ЗаказПредставление) +
			""" недостаточно.";*/
					/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокКоличество, Выборка.ДокументКоличество,
			Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
				}
				/*//СуммаОстаток = ?(Выборка.ОстатокСумма = NULL, 0, Выборка.ОстатокСумма);
*/
				if(true/*Выборка.ОстатокСумма < Выборка.ДокументСумма*/)
				{
					/*СтрокаСообщения = "Остатка суммы взаиморасчетов по товару " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
			                          ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""), ?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
			" переданному по договору """ + СокрЛП(СтруктураШапкиДокумента.ДоговорКонтрагента) + ?(НЕ ЗначениеЗаполнено(Выборка.Заказ), "", " и по заказу " + Выборка.ЗаказПредставление) +
			""" недостаточно.";*/
					/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокСумма, Выборка.ДокументСумма, 
			СтруктураШапкиДокумента.ВалютаВзаиморасчетов, Отказ, Заголовок);*/
				}
			}
			//;;
		}
		// КонтрольОстатков()
		// Процедура контролирует остаток по данному регистру по переданному документу
		// и его табличной части. В случае недостатка товаров выставляется флаг отказа и
		// выдается сообщегние.
		//
		// При контроле предполагается что сделка (заказ) расположены в шапке если взаиморасчеты по договору ведутся по счетам,
		//		и в табличной части документа в остальных случаях .
		//

		public void ТоварыПереданныеКонтрольОстатков_РеализацияОтгруженныхТоваров(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
		{
			//ЕстьСуммаВключаетНДС = (СтруктураПараметров.МетаданныеДокумента.Реквизиты.Найти("СуммаВключаетНДС") <> Неопределено);
			//ЕстьСерия            = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СерияНоменклатуры", СтруктураПараметров.МетаданныеДокумента, СтруктураПараметров.ИмяТабличнойЧасти);
			//ЕстьХарактеристика   = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ХарактеристикаНоменклатуры", СтруктураПараметров.МетаданныеДокумента, СтруктураПараметров.ИмяТабличнойЧасти);
			//ЕстьКоэффициент      = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Коэффициент", СтруктураПараметров.МетаданныеДокумента, СтруктураПараметров.ИмяТабличнойЧасти);
			//ИмяСуммы    = "Док.Сумма";
			//ИмяСуммыНДС = "Док.СуммаНДС";
			//ИмяСуммы    = ?(ЕстьСуммаВключаетНДС И Не СтруктураШапкиДокумента.СуммаВключаетНДС И Не ПустаяСтрока(ИмяСуммыНДС), "(" + ИмяСуммы + "+" + ИмяСуммыНДС + ")", ИмяСуммы);
			//ИмяСуммы    = ИмяСуммы + " * &КратностьВзаиморасчетов * &КурсДокумента / &КурсВзаиморасчетов / &КратностьДокумента";
			//ЕстьЗаказВТЧ = ложь;
			if(true/*СтруктураШапкиДокумента.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоЗаказам
		ИЛИ СтруктураШапкиДокумента.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом*/)
			{
				//ПараметрЗапросаСделка = Неопределено;
				//ЕстьЗаказВТЧ = истина;
			}
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			/*ТекстЗапросаСписокНоменклатуры = "
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Номенклатура 
	|ИЗ
	|	Документ." + СтруктураПараметров.ИмяТаблицы +"
	|ГДЕ Ссылка = &ДокументСсылка";*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",     СтруктураШапкиДокумента.ДокументОтгрузки);
			//Запрос.УстановитьПараметр("ДоговорКонтрагента", СтруктураШапкиДокумента.ДоговорКонтрагента);
			//Запрос.УстановитьПараметр("Сделка", ПараметрЗапросаСделка);
			//Запрос.УстановитьПараметр("СтатусПередачи",      СтруктураПараметров.СтатусПередачи);
			//мВалютаВзаиморасчетов = СтруктураШапкиДокумента.ВалютаВзаиморасчетов;
			//Запрос.УстановитьПараметр("КурсДокумента",           ЗаполнениеДокументов.КурсДокумента(СтруктураШапкиДокумента.Ссылка, глЗначениеПеременной("ВалютаРегламентированногоУчета")));
			//Запрос.УстановитьПараметр("КратностьДокумента",      ЗаполнениеДокументов.КратностьДокумента(СтруктураШапкиДокумента.Ссылка, глЗначениеПеременной("ВалютаРегламентированногоУчета")));
			//Запрос.УстановитьПараметр("КурсВзаиморасчетов",      СтруктураШапкиДокумента.КурсВзаиморасчетов);
			//Запрос.УстановитьПараметр("КратностьВзаиморасчетов", СтруктураШапкиДокумента.КратностьВзаиморасчетов);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,"
	+ ?(ЕстьЗаказВТЧ,"
	|	Док.ЗаказПокупателя КАК Сделка,"
	,"")
	+ ?(ЕстьХарактеристика, "
	|	Док.ХарактеристикаНоменклатуры           КАК ХарактеристикаНоменклатуры,"
	,"")
	+ ?(ЕстьСерия, "
	|	Док.СерияНоменклатуры                    КАК СерияНоменклатуры,"
	,"")
	+ ?(ЕстьКоэффициент, "
	|	СУММА(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) КАК ДокументКоличество,", "
	|	СУММА(Док.Количество)                                  		КАК ДокументКоличество,") + "
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)       		КАК ОстатокКоличество,
	|	СУММА(ВЫРАЗИТЬ(" + ИмяСуммы + " КАК Число(15,2)))      		КАК ДокументСумма, 
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.СуммаВзаиморасчетовОстаток), 0)	КАК ОстатокСумма
	|ИЗ 
	|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыПереданные.Остатки(,
	|		Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ")
	|	И ДоговорКонтрагента = &ДоговорКонтрагента
	|   "+?(не ЕстьЗаказВТЧ,"И Сделка                = &Сделка","")+"
	|	И СтатусПередачи        = &СтатусПередачи
	|	) КАК Остатки
	|ПО 
	|	Док.Номенклатура                = Остатки.Номенклатура"
	+ ?(ЕстьХарактеристика, "
	| И Док.ХарактеристикаНоменклатуры  = Остатки.ХарактеристикаНоменклатуры"
	,"")
	+ ?(ЕстьСерия, "
	| И Док.СерияНоменклатуры  = Остатки.СерияНоменклатуры"
	,"") 
	+ ?(ЕстьЗаказВТЧ,"
	|И	ВЫБОР	КОГДА Док.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
	|			ТОГДА Неопределено
	|			ИНАЧЕ Док.ЗаказПокупателя
	|	КОНЕЦ = Остатки.Сделка"
	,"")+	"
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура"
	+ ?(ЕстьХарактеристика, "
	|	, Док.ХарактеристикаНоменклатуры "
	,"")
	+ ?(ЕстьСерия, "
	|	, Док.СерияНоменклатуры "
	,"")
	+ ?(ЕстьЗаказВТЧ,"
	|,Док.ЗаказПокупателя"
	,"")+ "
	|	
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < СУММА(Док.Количество)
	| ИЛИ  ЕСТЬNULL(МАКСИМУМ(Остатки.СуммаВзаиморасчетовОстаток), 0) < СУММА(" + ИмяСуммы + ")
	|	
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыПереданные.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ
			|Док.Номенклатура КАК Номенклатура"
			+ ?(ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры ","")
			+ "
			|ИЗ 
			|	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
			|
			|ГДЕ 
			|	Док.Ссылка  =  &ДокументСсылка";*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыПереданные"
				,РезультатЗапросаДляБлокировки);*/
					/*СтруктураЗначенийБлокировки = Новый Структура(
				"ДоговорКонтрагента, СтатусПередачи"
				, СтруктураШапкиДокумента.ДоговорКонтрагента
				, СтруктураПараметров.СтатусПередачи);*/
					if(true/*ПараметрЗапросаСделка <> Неопределено*/)
					{
						//СтруктураЗначенийБлокировки.Вставить("Сделка", ПараметрЗапросаСделка);
					}
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура", "Номенклатура");
					if(true/*ЕстьХарактеристика*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, Отказ, Заголовок);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				//ПодстрокаСделка = "";
				if(true/*ЕстьЗаказВТЧ*/)
				{
					//ПодстрокаСделка = " и по заказу "+СокрЛП(Выборка.Сделка);
				}
				if(true/*Выборка.ОстатокКоличество < Выборка.ДокументКоличество*/)
				{
					/*СтрокаСообщения = "Остатка " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
			                          ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""), ?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
			" переданного по договору """ + СокрЛП(СтруктураШапкиДокумента.ДоговорКонтрагента) + 
			ПодстрокаСделка +
			""" недостаточно.";*/
					/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокКоличество, Выборка.ДокументКоличество,
			Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
				}
				if(true/*Выборка.ОстатокСумма < Выборка.ДокументСумма*/)
				{
					/*СтрокаСообщения = "Остатка суммы взаиморасчетов по товару " + 
			УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
			                          ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""), ?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
			" переданному по договору """ + СокрЛП(СтруктураШапкиДокумента.ДоговорКонтрагента) + 
			ПодстрокаСделка +
			""" недостаточно.";*/
					/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.ОстатокСумма, Выборка.ДокументСумма, 
			мВалютаВзаиморасчетов, Отказ, Заголовок);*/
				}
			}
			//;;
		}
		// Процедура контролирует лимиты возвратной тары, передаваемой покупателю по переданному документу
		// и его табличной части. В случае превышения лимита выставляется флаг отказа и
		// выдается сообщегние.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  СтруктураШапкиДокумента - структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  Отказ             - флаг отказа в проведении,
		//  Заголовок         - строка, заголовок сообщения об ошибке проведения.
		//

		public void ТоварыПереданныеКонтрольЛимитовВозвратнойТары(/*СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			//ИмяТабличнойЧасти  = "ВозвратнаяТара";
			//ИмяДокумента       = СтруктураШапкиДокумента.Ссылка.Метаданные().Имя;
			//ИмяТаблицы         = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			/*ТекстЗапросаСписокНоменклатуры = "
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Номенклатура 
	|ИЗ
	|	Документ." + ИмяТаблицы +"
	|ГДЕ Ссылка = &ДокументСсылка";*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",     СтруктураШапкиДокумента.Ссылка);
			//Запрос.УстановитьПараметр("Дата",               СтруктураШапкиДокумента.Дата);
			//Запрос.УстановитьПараметр("ДоговорКонтрагента", СтруктураШапкиДокумента.ДоговорКонтрагента);
			//Запрос.УстановитьПараметр("СтатусПередачи",     Перечисления.СтатусыПолученияПередачиТоваров.ВозвратнаяТара);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
	|	СУММА(Док.Количество) КАК ДокументКоличество, 
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) 	   КАК ОстатокКоличество,
	|	МИНИМУМ(Лимиты.ЛимитПокупателю)                        КАК Лимит
	|   
	|ИЗ 
	|	Документ." + ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыПереданные.Остатки(,
	|		Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ")
	|	И ДоговорКонтрагента = &ДоговорКонтрагента
	|	И СтатусПередачи        = &СтатусПередачи
	|	) КАК Остатки
	|ПО 
	|	Док.Номенклатура                = Остатки.Номенклатура
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрСведений.ЛимитыВозвратнойТары.СрезПоследних(,
	|		Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ")
	|	И ДоговорКонтрагента = &ДоговорКонтрагента
	|	) КАК Лимиты
	|ПО 
	|	Док.Номенклатура                = Лимиты.Номенклатура
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И НЕ Лимиты.ЛимитПокупателю ЕСТЬ NULL
	|	И Лимиты.ЛимитПокупателю > 0
	|
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура
	|
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) + СУММА(Док.Количество) > МИНИМУМ(Лимиты.ЛимитПокупателю)
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыПереданные.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ
			|Док.Номенклатура КАК Номенклатура
			|ИЗ 
			|	Документ." + ИмяТаблицы + " КАК Док
			|
			|ГДЕ 
			|	Док.Ссылка  =  &ДокументСсылка";*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыПереданные"
				,РезультатЗапросаДляБлокировки);*/
					/*СтруктураЗначенийБлокировки = Новый Структура(
				"ДоговорКонтрагента, СтатусПередачи"
				, СтруктураШапкиДокумента.ДоговорКонтрагента
				, Перечисления.СтатусыПолученияПередачиТоваров.ВозвратнаяТара);*/
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура", "Номенклатура");
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, ОтказПроведения, ЗаголовокСообщения);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "По " + 
		УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, "", "") +
		" по договору """ + СокрЛП(СтруктураШапкиДокумента.ДоговорКонтрагента) + """ превышен лимит возвратной тары.";*/
				/*ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения + Символы.ПС + Символы.Таб +
						   "Лимит " + (Выборка.Лимит) + " " + Выборка.ЕдиницаХраненияОстатковПредставление +
						   "; Передано ранее " + Выборка.ОстатокКоличество + " " + Выборка.ЕдиницаХраненияОстатковПредставление +
						   "; Требуется передать " + Выборка.ДокументКоличество + " " + Выборка.ЕдиницаХраненияОстатковПредставление, ОтказПроведения);*/
			}
			//;;
		}
		// КонтрольЛимитовВозвратнойТары()
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ПО РЕГИСТРУ ТоварыКПолучениюНаСклады
		// Процедура контролирует остаток по данному регистру по переданному документу
		// и его табличной части. В случае недостатка товаров выставляется флаг отказа и
		// выдается сообщегние.
		//
		// Параметры:
		//  ИмяТабличнойЧасти - строка, имя табличной части, которая проводится по регистру,
		//  СтруктураШапкиДокумента - структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  Отказ             - флаг отказа в проведении,
		//  Заголовок         - строка, заголовок сообщения об ошибке проведения.
		//

		public void ТоварыКПолучениюНаСкладыКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения, РежимПроведения*/)
		{
			if(true/*РежимПроведения <> РежимПроведенияДокумента.Оперативный*/)
			{
			}
			//МетаданныеДокумента     = СтруктураШапкиДокумента.Ссылка.Метаданные();
			//ИмяДокумента            = МетаданныеДокумента.Имя;
			//ИмяТаблицы              = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			if(true/*ИмяДокумента = "КорректировкаСерийИХарактеристикТоваров"*/)
			{
				//ИмяСерияНоменклатуры = "СерияНоменклатурыСтарая";
				//ИмяХарактеристикаНоменклатуры = "ХарактеристикаНоменклатурыСтарая";
			}
			//ЕстьХарактеристика      = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента(ИмяХарактеристикаНоменклатуры, МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСерия               = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента(ИмяСерияНоменклатуры, МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьКачество            = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Качество", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьОрдерВТабЧасти      = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПриходныйОрдер", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСкладВТабЧасти      = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Склад", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьДокументРезерва     = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ДокументРезерва", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьДокументПеремещения = (МетаданныеДокумента.Реквизиты.Найти("ДокументПеремещения") <> Неопределено);
			//ЕстьДокументПередачи    = (МетаданныеДокумента.Реквизиты.Найти("ДокументПередачи") <> Неопределено);
			//ЕстьКоэффициент         = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Коэффициент", МетаданныеДокумента, ИмяТабличнойЧасти);
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			/*ТекстЗапросаСписокНоменклатуры = "
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Номенклатура 
	|ИЗ
	|	Документ." + ИмяТаблицы +"
	|ГДЕ Ссылка = &ДокументСсылка";*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",          СтруктураШапкиДокумента.Ссылка);
			if(true/*МетаданныеДокумента.Реквизиты.Найти("СкладОрдер") <> Неопределено*/)
			{
				//Запрос.УстановитьПараметр("ПриходныйОрдер",          СтруктураШапкиДокумента.СкладОрдер);
				//Запрос.УстановитьПараметр("Склад",                   СтруктураШапкиДокумента.СкладПриходногоОрдера);
				//текСклад = СтруктураШапкиДокумента.СкладПриходногоОрдера;
			}
			if(true/*ЕстьДокументПеремещения*/)
			{
				//Запрос.УстановитьПараметр("ДокументПеремещения",  СтруктураШапкиДокумента.ДокументПеремещения);
			}
			if(true/*ЕстьСкладВТабЧасти*/)
			{
				//ЗапросСклады = новый Запрос;
				/*ЗапросСклады.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ Склад ИЗ Документ."+ИмяТаблицы+"
		|ГДЕ Ссылка=&ДокументСсылка";*/
				//ЗапросСклады.УстановитьПараметр("ДокументСсылка",СтруктураШапкиДокумента.Ссылка);
				//СписокСкладов = ЗапросСклады.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");
			}
			//Запрос.УстановитьПараметр("СписокСкладов", СписокСкладов);
			//МассивПустыхСсылок = Новый Массив;
			//МассивПустыхСсылок.Добавить(Неопределено);
			/*//МассивПустыхСсылок.Добавить(Документы.ЗаказПокупателя.ПустаяСсылка());
*/
			/*//МассивПустыхСсылок.Добавить(Документы.ЗаказНаПроизводство.ПустаяСсылка());
*/
			/*//МассивПустыхСсылок.Добавить(Документы.ВнутреннийЗаказ.ПустаяСсылка());
*/
			//МассивПустыхСсылок.Добавить(Документы.ПриходныйОрдерНаТовары.ПустаяСсылка());
			//Запрос.УстановитьПараметр("МассивПустыхСсылок", МассивПустыхСсылок);
			/*ТекстЗапроса = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,"
	+ ?(ЕстьСкладВТабЧасти, "
	|   Док.Склад                                              КАК Склад,", "
	|   &Склад                                                 КАК Склад,") 
	+ ?(ЕстьОрдерВТабЧасти, "
	|   Док.ПриходныйОрдер                                     КАК ПриходныйОрдер,", 
	?(ЕстьДокументРезерва, ?(ИмяДокумента = "ПеремещениеТоваров", "
	|   Док.ДокументРезерва                                    КАК ПриходныйОрдер,", " 
	|   Док.ДокументРезерва                                    КАК ДокументРезерва,"), " 
	|   &ПриходныйОрдер                                        КАК ПриходныйОрдер,")) + "
	|	Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,"
	+ ?(ЕстьХарактеристика, "
	|	Док."+ИмяХарактеристикаНоменклатуры+"				   КАК ХарактеристикаНоменклатуры,"
	,"")
	+ ?(ЕстьСерия, "
	|	Док."+ИмяСерияНоменклатуры+"           				   КАК СерияНоменклатуры,"
	,"")
	+ ?(ЕстьКачество, "
	|	Док.Качество			                               КАК Качество,"
	,"") 
	+ ?(ЕстьКоэффициент, "
	|	СУММА(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) КАК ДокументКоличество,", "
	|	СУММА(Док.Количество)                                  КАК ДокументКоличество,") + "
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)       КАК ОстатокКоличество
	|ИЗ 
	|	Документ." + ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(, Склад в (&СписокСкладов) И
	|		Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ")"
	+ ?(ЕстьОрдерВТабЧасти ИЛИ ЕстьДокументРезерва, "", "
	|   И ДокументПолучения = &ПриходныйОрдер")
	+ ?(ЕстьДокументПеремещения,"
	|   И ДокументПолучения = &ДокументПеремещения"
	,"") + "
	|	) КАК Остатки
	|ПО 
	|	Док.Номенклатура                = Остатки.Номенклатура"
	+ ?(ЕстьХарактеристика, "
	| И Док."+ИмяХарактеристикаНоменклатуры+"  = Остатки.ХарактеристикаНоменклатуры"
	,"")
	+ ?(ЕстьСерия, "
	| И Док."+ИмяСерияНоменклатуры+"           = Остатки.СерияНоменклатуры"
	,"")
	+ ?(ЕстьКачество, "
	| И Док.Качество  = Остатки.Качество"
	,"") 
	+ ?(ЕстьОрдерВТабЧасти, "
	| И Док.ПриходныйОрдер = Остатки.ДокументПолучения", "")
	+ ?(ЕстьДокументРезерва, ?(ИмяДокумента = "ПеремещениеТоваров", "
	| И Док.ДокументРезерва = Остатки.ДокументПолучения", "
	| И Док.ДокументРезерва = Остатки.ДокументРезерва"), "")
	+ ?(ЕстьСкладВТабЧасти, "
	| И Док.Склад          = Остатки.Склад", "") + "
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка"
	+?(ЕстьОрдерВТабЧасти, " 
	|И НЕ Док.ПриходныйОрдер В (&МассивПустыхСсылок)","")
	+ ?(ЕстьДокументРезерва И ИмяДокумента = "ПеремещениеТоваров", "
	|	И НЕ Док.ДокументРезерва В (&МассивПустыхСсылок)
	|	И НЕ Док.ДокументРезерва Ссылка Документ.ВнутреннийЗаказ
	|	И НЕ Док.ДокументРезерва Ссылка Документ.ЗаказПокупателя  "+
	?(ИмяТабличнойЧасти="ВозвратнаяТара","","
	|	И НЕ Док.ДокументРезерва Ссылка Документ.ЗаказНаПроизводство")+"
	|", "") + "
	|
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура"
	+ ?(ЕстьХарактеристика, "
	|	, Док."+ИмяХарактеристикаНоменклатуры
	,"")
	+ ?(ЕстьСерия, "
	|	, Док."+ИмяСерияНоменклатуры
	,"")
	+ ?(ЕстьКачество, "
	|	, Док.Качество "
	,"")
	+ ?(ЕстьОрдерВТабЧасти, "
	|	, Док.ПриходныйОрдер "
	,"")
	+ ?(ЕстьДокументРезерва, "
	|	, Док.ДокументРезерва "
	,"")
	+ ?(ЕстьСкладВТабЧасти, "
	|	, Док.Склад "
	,"") + "
	|
	|ИМЕЮЩИЕ " + ?(ЕстьДокументПеремещения, "-", "") + " ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < "
	+ ?(ЕстьКоэффициент,	"СУММА(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент)",
							"СУММА(Док.Количество)") + "
    |
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*Запрос.Текст = 
			"ВЫБРАТЬ Док.Номенклатура КАК Номенклатура"
			+ ?(ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры", "")
			+ ?(ЕстьКачество, ", Док.Качество КАК Качество", "")
			+ ?(ЕстьСкладВТабЧасти, ", Док.Склад КАК Склад", "") + "
			|ИЗ Документ." + ИмяТаблицы + " КАК Док
			|ГДЕ
			|	Док.Ссылка  =  &ДокументСсылка"
			+ ?(ЕстьОрдерВТабЧасти, " 
			|И НЕ Док.ПриходныйОрдер В (&МассивПустыхСсылок)","")
			+ ?(ЕстьДокументРезерва И ИмяДокумента = "ПеремещениеТоваров", "
			|	И НЕ Док.ДокументРезерва В (&МассивПустыхСсылок)
			|	И НЕ Док.ДокументРезерва Ссылка Документ.ВнутреннийЗаказ
			|	И НЕ Док.ДокументРезерва Ссылка Документ.ЗаказПокупателя  "
			+ ?(ИмяТабличнойЧасти = "ВозвратнаяТара", "", "
			|	И НЕ Док.ДокументРезерва Ссылка Документ.ЗаказНаПроизводство"), "");*/
				//РезультатЗапросаДляБлокировки = Запрос.Выполнить();
				if(true/*НЕ РезультатЗапросаДляБлокировки.Пустой()*/)
				{
					/*СтруктураПараметровБлокировки = Новый Структура(
				"ТипТаблицы,ИмяТаблицы,ИсточникДанных"
				,"РегистрНакопления"
				,"ТоварыКПолучениюНаСклады"
				,РезультатЗапросаДляБлокировки);*/
					//СтруктураЗначенийБлокировки = Неопределено;
					//СтруктураИсточникаДанных = Новый Структура("Номенклатура", "Номенклатура");
					if(true/*ЕстьХарактеристика*/)
					{
						//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры");
					}
					if(true/*ЕстьКачество*/)
					{
						//СтруктураИсточникаДанных.Вставить("Качество","Качество");
					}
					if(true/*ЕстьСкладВТабЧасти*/)
					{
						//СтруктураИсточникаДанных.Вставить("Склад","Склад");
					}
					//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,СтруктураЗначенийБлокировки,СтруктураИсточникаДанных, ОтказПроведения, ЗаголовокСообщения);
				}
			}
			//Запрос.Текст = ТекстЗапроса;
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				//КоличествоОстаток =  ?(ЕстьДокументПеремещения, - Выборка.ОстатокКоличество, Выборка.ОстатокКоличество);
				/*СтрокаСообщения = "Остатка " + 
		УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, 
								  ?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""), ?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
		" к получению на склад " + СокрЛП(Выборка.Склад) + ?(ЕстьДокументПередачи," по документу " + СтруктураШапкиДокумента.ДокументПередачи, "")
		+ ?(ЕстьКачество, " с качеством " + Выборка.Качество, "") 
		+ ?(ЕстьДокументРезерва И ИмяДокумента <> "ПеремещениеТоваров", ?(НЕ ЗначениеЗаполнено(Выборка.ДокументРезерва),""," с документом резерва " + СокрЛП(Выборка.ДокументРезерва)), "") + " недостаточно.";*/
				/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, КоличествоОстаток, Выборка.ДокументКоличество,
		Выборка.ЕдиницаХраненияОстатковПредставление, ОтказПроведения, ЗаголовокСообщения);*/
			}
			//;;
		}
		// КонтрольОстатков()
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ КОНТРОЛЯ ОСТАТКОВ ПО РЕГИСТРУ СвободныеОстатки
		// Процедура контролирует остаток по переданному документу и его табличной части.
		// В случае недостатка товаров выставляется флаг отказа и выдается сообщение.
		//
		// Параметры:
		//  ИмяТабличнойЧасти			- строка, имя табличной части, которая проводится по регистру,
		//  СтруктураШапки		- структура, содержащая значения ссылочных реквизитов по шапке документа,
		//  ОтказПроведения		- флаг отказа в проведении,
		//  ЗаголовокСообщения	- строка, заголовок сообщения об ошибке проведения.
		//

		public void СвободныеОстаткиКонтрольОстатков(/*ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения*/)
		{
			//Отказ     = ОтказПроведения;
			//Заголовок = ЗаголовокСообщения;
			//СтруктураПараметров = ПолучитьСтруктуруПараметров(СтруктураШапкиДокумента, ИмяТабличнойЧасти, ЗаголовокСообщения);
			if(true/*СтруктураПараметров = Неопределено*/)
			{
			}
			/*// Подготовим временную таблицу табличной части документа
*/
			//МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
			if(true/*НЕ СформироватьВременнуюТаблицуПоТаблицеДокумента(МенеджерВременныхТаблиц, СтруктураПараметров)*/)
			{
				/*// Нет номенклатуры, по которой необходимо контролировать остатки
*/
			}
			/*// Получим данные для передачи в процедуру ПроверитьОстатки() 
*/
			/*ТекстЗапроса = 
	"ВЫБРАТЬ
	|	ВложенныйЗапрос.Склад КАК Склад,
	|	ВложенныйЗапрос.Номенклатура,
	|	ВложенныйЗапрос.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков,"
	+ ?(СтруктураПараметров.ЕстьХарактеристика, "ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ","")
	+ ?(СтруктураПараметров.ЕстьСерия, "ВложенныйЗапрос.СерияНоменклатуры КАК СерияНоменклатуры,", "") + "
	|	ВложенныйЗапрос.Качество КАК Качество,
	|	СУММА(ВложенныйЗапрос.Количество) КАК Количество,
	|	СУММА(ВложенныйЗапрос.КоличествоРезервОУ) КАК КоличествоРезервОУ,
	|	СУММА(ВложенныйЗапрос.КПередаче) КАК КПередаче,
	|	СУММА(ВложенныйЗапрос.КПолучению) КАК КПолучению,
	|	МАКСИМУМ(ВложенныйЗапрос.КПолучениюОстаток) КАК КПолучениюОстаток,
	|	МАКСИМУМ(ВложенныйЗапрос.КоличествоОстаток) КАК СвободныйОстаток,
	|	МАКСИМУМ(ВложенныйЗапрос.ОстатокСУчетомСерии) КАК ОстатокСУчетомСерии
	|	" + ?(СтруктураПараметров.ЕстьСерия, ", МАКСИМУМ(ВложенныйЗапрос.КоличествоОстатокБезСерий) КАК СвободныйОстатокБезСерий
	|	, СУММА(ВЫБОР КОГДА ВложенныйЗапрос.ПризнакСписанияИзРезерва
	|				ТОГДА 0
	|				ИНАЧЕ ВложенныйЗапрос.Количество
	|			КОНЕЦ) КАК КоличествоИзСвободногоОстатка", "") + "
	|ИЗ
	|	(ВЫБРАТЬ
	|		Док.Склад КАК Склад,
	|		Док.Номенклатура КАК Номенклатура,"
			+ ?(СтруктураПараметров.ЕстьХарактеристика, " Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,","")
			+ ?(СтруктураПараметров.ЕстьСерия, " Док.СерияНоменклатуры КАК СерияНоменклатуры,", "") + "
	|		Док.Качество КАК Качество,
	|		Док.Количество КАК Количество,
	|		Док.КоличествоРезервОУ КАК КоличествоРезервОУ,
	|		Док.КПередаче КАК КПередаче,
	|		ЕСТЬNULL(СвободныеОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
	|		ЕСТЬNULL(СвободныеОстатки.КоличествоСУчетомСерииОстаток, 0) КАК ОстатокСУчетомСерии,
	|		Док.КПолучению КАК КПолучению
	|		" + ?(СтруктураПараметров.ВключитьТоварыКПолучению, ", ЕСТЬNULL(ТоварыКПолучению.КоличествоОстаток, 0)", ", 0") + " КАК КПолучениюОстаток
	|		" + ?(СтруктураПараметров.ЕстьСерия, ",	ЕСТЬNULL(СвободныеОстаткиБезСерий.КоличествоОстаток, 0) КАК КоличествоОстатокБезСерий
	|		, Док.ПризнакСписанияИзРезерва КАК ПризнакСписанияИзРезерва", "") + "
	|	ИЗ
	|		ВременнаяТаблицаДокумента КАК Док
	|	
	|" + ПолучитьТекстЗапросаСвободныеОстатки(СтруктураПараметров) + "
	|
	|) КАК ВложенныйЗапрос
	|
	|СГРУППИРОВАТЬ ПО
	|	ВложенныйЗапрос.Склад,
	|	ВложенныйЗапрос.Номенклатура,
	|	ВложенныйЗапрос.Качество"
	+ ?(СтруктураПараметров.ЕстьХарактеристика, ",	ВложенныйЗапрос.ХарактеристикаНоменклатуры", "")
	+ ?(СтруктураПараметров.ЕстьСерия, ", ВложенныйЗапрос.СерияНоменклатуры", "");*/
			if(true/*СтруктураПараметров.ЕстьСерия*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "	
			|ИТОГИ СУММА (КоличествоИзСвободногоОстатка), СУММА(КПередаче)
			|ПО Номенклатура, Склад, Качество" + ?(СтруктураПараметров.ЕстьХарактеристика, ", ХарактеристикаНоменклатуры", "");*/
			}
			if(true/*глЗначениеПеременной("ИспользоватьБлокировкуДанных")*/)
			{
				/*СтруктураПараметровБлокировки = Новый Структура(
			"ТипТаблицы,ИмяТаблицы,ИсточникДанных,ИмяВременнойТаблицы"
			,"РегистрНакопления"
			,"СвободныеОстатки"
			,МенеджерВременныхТаблиц
			,"ВременнаяТаблицаДокумента");*/
				/*СтруктураИсточникаДанных = Новый Структура(
			"Склад,Номенклатура,Качество"
			,"Склад"
			,"Номенклатура"
			,"Качество");*/
				if(true/*СтруктураПараметров.ЕстьХарактеристика*/)
				{
					//СтруктураИсточникаДанных.Вставить("ХарактеристикаНоменклатуры", "ХарактеристикаНоменклатуры");
				}
				//ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,,СтруктураИсточникаДанных, Отказ, Заголовок);
				if(true/*Отказ*/)
				{
				}
			}
			//Запрос = Новый Запрос;
			//Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
			//Запрос.УстановитьПараметр("Ссылка", СтруктураПараметров.ДокументСсылка);
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			//Выборка = РезультатЗапроса.Выбрать();
			//ПроверитьОстатки(Выборка, ОтказПроведения, ЗаголовокСообщения, СтруктураПараметров);
		}
		// КонтрольОстатков()
		// Функция возвращает структуру параметров необходимую для заполнения временной таблицы документа
		//
		// Возвращаемое значение - <Структура> содержит ключи:
		//		Склад						- имя реквизита ТЧ содержащий склад или значение склада (например, если склад в шапке),
		//		РеквизитРезерв				- имя реквизита, содержащего документ-резерв,
		//		РеквизитРезервВШапке		- булево,
		//		ЕстьСоставНабора			- булево. Истина, если к табличной части необходимо присоединить состав набора,
		//		ВключитьТоварыКПолучению	- булево. Истина, если требуется учесть остатки товаров к получению
		//		РеквизитКПередаче			- имя реквизита или значение. если требуется учесть товары к передаче документа
		//		ДопУсловияТабличнойЧасти	- условия для отбора строк документа
		//		КоличествоРезервОУ			- количество, резервируемое с обособленным учетом
		//		ОперацияРезвирование		- булево, признак того, что выполняется резервирование
		//										влияет на контроль по серии
		//

		public object ПолучитьСтруктуруПараметров(/*СтруктураШапкиДокумента, ИмяТабличнойЧасти, ЗаголовокСообщения*/)
		{
			//РеквизитСклад            = "Склад";
			//РеквизитРезерв           = "";
			//РеквизитРезервВШапке     = Ложь;
			//ЕстьСоставНабора         = Ложь;
			//ВключитьТоварыКПолучению = Ложь;
			//РеквизитКПередаче        = "";
			/*ДопУсловияТабличнойЧасти = " И НЕ Док.Номенклатура.Комплект 
								|И НЕ Док.Номенклатура.Услуга";*/
			if(true/*СтруктураШапкиДокумента.Свойство("ДокументСсылка")*/)
			{
				/*// Некоторые документы формируют структуру шапки по другому объекту,
*/
				/*// например, документ "Корректировка заказа покупателя"
*/
				//ДокументСсылка = СтруктураШапкиДокумента.ДокументСсылка;
			}
			//МетаданныеДокумента = ДокументСсылка.Метаданные();
			//ИмяДокумента        = МетаданныеДокумента.Имя;
			//ИмяТаблицы          = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			if(true/*ИмяДокумента = "КомплектацияНоменклатуры"*/)
			{
				//ЕстьСерия           = Истина;
				//ЕстьХарактеристика  = Истина;
				//ЕстьКоэффициент     = Истина;
				//ЕстьКачество        = Ложь;
				//ЕстьСпособСписания  = Истина;
			}
			//ИспользоватьУказаниеСерийНоменклатурыПриРезервировании = Ложь;
			if(true/*НЕ СтруктураШапкиДокумента.Свойство("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании", ИспользоватьУказаниеСерийНоменклатурыПриРезервировании)*/)
			{
				//ИспользоватьУказаниеСерийНоменклатурыПриРезервировании = глЗначениеПеременной("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании");
			}
			/*// Если в параметрах учета отключен режим
*/
			//ЕстьСерия           = ЕстьСерия И глЗначениеПеременной("ИспользоватьСерииНоменклатуры");
			//ЕстьХарактеристика  = ЕстьХарактеристика И глЗначениеПеременной("ИспользоватьХарактеристикиНоменклатуры");
			/*// Поля имеют смысл при резервировании с ОУ
*/
			//КоличествоРезервОУ = "0";
			/*// Количество резервируемое по ОУ
*/
			//ОперацияРезвирование = Ложь;
			if(true/*ИмяДокумента = "ПеремещениеТоваров"*/)
			{
				//РеквизитСклад            = СтруктураШапкиДокумента.Склад;
				//РеквизитРезерв           = "ДокументРезерва";
				//ВключитьТоварыКПолучению = Истина;
			}
			//СтруктураПараметров = Новый Структура;
			//СтруктураПараметров.Вставить("ИмяДокумента",						ИмяДокумента);
			//СтруктураПараметров.Вставить("ИмяТаблицы",							ИмяТаблицы);
			//СтруктураПараметров.Вставить("Ссылка",								СтруктураШапкиДокумента.Ссылка);
			//СтруктураПараметров.Вставить("ДокументСсылка",						ДокументСсылка);
			//СтруктураПараметров.Вставить("Склад",								РеквизитСклад);
			//СтруктураПараметров.Вставить("РеквизитРезерв",						РеквизитРезерв);
			//СтруктураПараметров.Вставить("РеквизитРезервВШапке",				РеквизитРезервВШапке);
			//СтруктураПараметров.Вставить("ВключитьТоварыКПолучению",			ВключитьТоварыКПолучению);
			//СтруктураПараметров.Вставить("РеквизитКПередаче",					РеквизитКПередаче);
			//СтруктураПараметров.Вставить("ДопУсловияТабличнойЧасти",			ДопУсловияТабличнойЧасти);
			//СтруктураПараметров.Вставить("КоличествоРезервОУ",					КоличествоРезервОУ);
			//СтруктураПараметров.Вставить("ОперацияРезвирование",				ОперацияРезвирование);
			//СтруктураПараметров.Вставить("ЕстьСерия",							ЕстьСерия);
			//СтруктураПараметров.Вставить("ЕстьХарактеристика",					ЕстьХарактеристика);
			//СтруктураПараметров.Вставить("ЕстьКоэффициент",						ЕстьКоэффициент);
			//СтруктураПараметров.Вставить("ЕстьКачество",						ЕстьКачество);
			//СтруктураПараметров.Вставить("ЕстьСпособСписания",					ЕстьСпособСписания);
			//СтруктураПараметров.Вставить("ЕстьСоставНабора",					ЕстьСоставНабора);
			//СтруктураПараметров.Вставить("МетаданныеТабЧасти",					МетаданныеТабЧасти);
			//СтруктураПараметров.Вставить("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании", ИспользоватьУказаниеСерийНоменклатурыПриРезервировании);
			if(true/*СтруктураШапкиДокумента.Свойство("ОбособленныйУчетТоваровПоЗаказамПокупателей")*/)
			{
				//СтруктураПараметров.Вставить("ОбособленныйУчетТоваровПоЗаказамПокупателей", СтруктураШапкиДокумента.ОбособленныйУчетТоваровПоЗаказамПокупателей);
			}
			if(true/*РеквизитРезервВШапке*/)
			{
				//СтруктураПараметров.Вставить("РеквизитРезервЗначение", СтруктураШапкиДокумента[РеквизитРезерв]);
			}
			return null;
		}
		// ПолучитьСтруктуруПараметров()
		// Функция возвращает текст запроса для объединения с основным запросом
		//
		// Параметры:
		//	ВключитьТоварыКПолучению	- булево, признак того, что необходимо получить остаток по регистру ТоварыКПолучению
		//

		public object ПолучитьТекстЗапросаСвободныеОстатки(/*СтруктураПараметров*/)
		{
			//ТекстЗапроса = "";
			if(true/*СтруктураПараметров.ВключитьТоварыКПолучению*/)
			{
				/*// Документ получения может быть только ордером, причем ордера без права продажи не учитываем,
*/
				/*// поскольку они уже учтены в регистре резервов
*/
				/*ТекстЗапроса = ТекстЗапроса + "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(,
			|		ДокументПолучения ССЫЛКА Документ.ПриходныйОрдерНаТовары
			|       И НЕ ДокументПолучения.БезПраваПродажи"
			+ ?(НЕ СтруктураПараметров.ЕстьХарактеристика," И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)","") + "
			|		И (Склад, Номенклатура, Качество"
					+ ?(СтруктураПараметров.ЕстьХарактеристика, ", ХарактеристикаНоменклатуры", "")
					+ ?(СтруктураПараметров.ЕстьСерия, ", СерияНоменклатуры", "") + ")
			|			 В	(ВЫБРАТЬ
			|					Док.Склад, Док.Номенклатура, Док.Качество"
							+ ?(СтруктураПараметров.ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры", "")
							+ ?(СтруктураПараметров.ЕстьСерия, ", Док.СерияНоменклатуры", "") + "
			|				 ИЗ
			|					ВременнаяТаблицаДокумента КАК Док
			|					ГДЕ Док.КПолучению = 0)) КАК ТоварыКПолучению
			|ПО ТоварыКПолучению.Номенклатура = Док.Номенклатура
			|	И ТоварыКПолучению.Склад = Док.Склад
			|	И ТоварыКПолучению.Качество = Док.Качество
			|	" + ?(СтруктураПараметров.ЕстьХарактеристика, "И ТоварыКПолучению.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры", "") + "
			|	" + ?(СтруктураПараметров.ЕстьСерия, "И ТоварыКПолучению.СерияНоменклатуры = Док.СерияНоменклатуры", "") + "
			|";*/
			}
			/*ТекстЗапроса = ТекстЗапроса + "
	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(,
	|				(Склад, Номенклатура, Качество" + ?(СтруктураПараметров.ЕстьХарактеристика, ", ХарактеристикаНоменклатуры", "") + ")
	|				 В	(ВЫБРАТЬ
	|						Док.Склад, Док.Номенклатура, Док.Качество"
							+ ?(СтруктураПараметров.ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры", "") + "
	|					 ИЗ
	|						ВременнаяТаблицаДокумента КАК Док)
	|															)КАК СвободныеОстатки
	|	ПО СвободныеОстатки.Номенклатура = Док.Номенклатура
	|	И СвободныеОстатки.Склад = Док.Склад
	|	И СвободныеОстатки.Качество = Док.Качество
	|	И СвободныеОстатки.ХарактеристикаНоменклатуры = " + ?(СтруктураПараметров.ЕстьХарактеристика, "Док.ХарактеристикаНоменклатуры", "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)") + "
	|	" + ?(СтруктураПараметров.ЕстьСерия, "И СвободныеОстатки.СерияНоменклатуры = Док.СерияНоменклатуры", "");*/
			if(true/*СтруктураПараметров.ЕстьСерия*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрНакопления.СвободныеОстатки.Остатки(,
		|				(Склад, Номенклатура, Качество" + ?(СтруктураПараметров.ЕстьХарактеристика, ", ХарактеристикаНоменклатуры", "") + ")
		|				 В	(ВЫБРАТЬ
		|						Док.Склад, Док.Номенклатура, Док.Качество"
							+ ?(СтруктураПараметров.ЕстьХарактеристика, ", Док.ХарактеристикаНоменклатуры", "") + "
		|					 ИЗ
		|						ВременнаяТаблицаДокумента КАК Док)) КАК СвободныеОстаткиБезСерий
		|ПО СвободныеОстаткиБезСерий.Номенклатура = Док.Номенклатура
		|	И СвободныеОстаткиБезСерий.Склад = Док.Склад
		|"+	?(СтруктураПараметров.ЕстьХарактеристика, "	И СвободныеОстаткиБезСерий.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры", "") + "
		|	И СвободныеОстаткиБезСерий.Качество = Док.Качество";*/
			}
			/*ТекстЗапроса = ТекстЗапроса + "
		|	ДЛЯ ИЗМЕНЕНИЯ
		|		РегистрНакопления.СвободныеОстатки.Остатки";*/
			return null;
		}
		// ПолучитьТекстЗапросаСвободныеОстатки()
		// Функция возвращает текст запроса к табличной части СоставНабора
		//
		// Особенности:
		//	- для определения способа списания "из резерва" заказ покупателя
		//	берется из соединения таблицы по ключу
		//	- если значение реквизита "СпособСписанияОстаткаТоваров" пустое, то
		//	берется его значение из соединения таблицы по ключу
		//	- если значение реквизита "Склад" пустое, то
		//	берется его значение из соединения таблицы по ключу
		//

		public object ТекстСоставНабора(/*СтруктураПараметров, УсловиеРезерв, УсловиеОУ*/)
		{
			//СкладСтрока = ТипЗнч(СтруктураПараметров.Склад) = Тип("Строка");
			if(true/*СкладСтрока*/)
			{
				/*ПолеСклад =
		"	ВЫБОР КОГДА ДокТов." + СтруктураПараметров.Склад + " = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
		|		ТОГДА Док." + СтруктураПараметров.Склад + "
		|		ИНАЧЕ ДокТов." + СтруктураПараметров.Склад + "
		|	КОНЕЦ";*/
			}
			//КоличествоЕдОстатков = ?(СтруктураПараметров.ЕстьКоэффициент, "ВЫРАЗИТЬ(ДокТов.Количество * Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))", "ВЫРАЗИТЬ(ДокТов.Количество * Док.Количество КАК Число(15,3))");
			/*// Сформируем текст условий УсловиеНеРезерв
*/
			/*// чтобы не контролировать списание из резерва:
*/
			//УсловиеНеРезерв = "";
			if(true/*НЕ ПустаяСтрока(СтруктураПараметров.РеквизитРезерв)*/)
			{
				if(true/*СтруктураПараметров.РеквизитРезервВШапке*/)
				{
					if(true/*ЗначениеЗаполнено(СтруктураПараметров.РеквизитРезервЗначение)*/)
					{
						if(true/*СтруктураПараметров.ЕстьСпособСписания*/)
						{
							//УсловиеНеРезерв = "(НЕ (ДокТов.СпособСписанияОстаткаТоваров = ЗНАЧЕНИЕ(Перечисление.СпособыСписанияОстаткаТоваров.ПустаяСсылка) И Док.СпособСписанияОстаткаТоваров = ЗНАЧЕНИЕ(Перечисление.СпособыСписанияОстаткаТоваров.ИзРезерва) ИЛИ ДокТов.СпособСписанияОстаткаТоваров = ЗНАЧЕНИЕ(Перечисление.СпособыСписанияОстаткаТоваров.ИзРезерва)))";
						}
					}
				}
			}
			if(true/*СтруктураПараметров.ЕстьКачество*/)
			{
				/*ПОЛЕ_Набор_Качество =
		"ВЫБОР КОГДА ДокТов.Качество = ЗНАЧЕНИЕ(Справочник.Качество.ПустаяСсылка)
		|		ТОГДА Док.Качество
		|		ИНАЧЕ ДокТов.Качество 
		|	КОНЕЦ";*/
			}
			/*ТекстЗапроса = 
	    "ВЫБРАТЬ
		|	ДокТов.Номенклатура КАК Номенклатура
		|,	" + ПолеСклад + " КАК Склад
		|,	" + КоличествоЕдОстатков + " КАК Количество
		
		// КПередаче равен нулю, т.к. для документов у которых есть СоставНабора
		// нет реквизита РеквизитКПередаче
		|,	0 КАК КПередаче 
		
		|,	" + СтруктураПараметров.КоличествоРезервОУ + " КАК КоличествоРезервОУ
		|,	" + ПОЛЕ_Набор_Качество + " КАК Качество"
		+ ?(СтруктураПараметров.ЕстьХарактеристика, Символы.ПС + ",	ДокТов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры", "")
		+ ?(СтруктураПараметров.ЕстьСерия, Символы.ПС + ", ДокТов.СерияНоменклатуры КАК СерияНоменклатуры", "") + "
		|,	" + ?(УсловиеНеРезерв = "", "ЛОЖЬ", 
				"ВЫБОР КОГДА " + УсловиеНеРезерв + "
		|			ТОГДА ЛОЖЬ 
		|			ИНАЧЕ ИСТИНА 
		|		КОНЕЦ") + " КАК ПризнакСписанияИзРезерва
		|,	0 КАК КПолучению
		|ИЗ
		|	Документ." + СтруктураПараметров.ИмяДокумента + ".СоставНабора КАК ДокТов
		|	ЛЕВОЕ СОЕДИНЕНИЕ Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
		|	ПО Док.КлючСтроки = ДокТов.КлючСтроки
		|		 И Док.Ссылка = &Ссылка
		|ГДЕ
		|	ДокТов.Ссылка = &Ссылка
		|	
		|	// Только те строки для который в основной таблице есть ключ
		|	И НЕ Док.КлючСтроки ЕСТЬ NULL 
		|	" + ?(УсловиеНеРезерв = "",
					"",		
					?(СтруктураПараметров.ЕстьСерия, 
						?(УсловиеОУ = "ЛОЖЬ", 
							"",
							" И ( НЕ(" + УсловиеОУ + ") ИЛИ " + УсловиеНеРезерв + ")"),
						" И " + УсловиеНеРезерв));*/
			return null;
		}
		// ТекстСоставНабора

		public object ПолучитьПОЛЕ_КПередаче(/*СтруктураПараметров, КоличествоЕдОстатков, Запрос*/)
		{
			//ПОЛЕ_КПередаче = "0";
			if(true/*ЗначениеЗаполнено(СтруктураПараметров.РеквизитКПередаче)*/)
			{
				if(true/*ТипЗнч(СтруктураПараметров.РеквизитКПередаче) = Тип("Строка")*/)
				{
					//ОписаниеТипаРеквизита = СтруктураПараметров.МетаданныеТабЧасти.Реквизиты[СтруктураПараметров.РеквизитКПередаче].Тип;
					if(true/*ОписаниеТипаРеквизита.Типы().Количество() = 1*/)
					{
						//УсловиеКПередаче   = " = &СтруктураПараметров.РеквизитКПередаче";
						//МассивПустыхСсылок = ОбщегоНазначения.ПустоеЗначениеТипа(ОписаниеТипаРеквизита.Типы()[0]);
					}
					//Запрос.УстановитьПараметр("СтруктураПараметров.РеквизитКПередаче", МассивПустыхСсылок);
					/*ПОЛЕ_КПередаче =
				"ВЫБОР НЕ Док." + СтруктураПараметров.РеквизитКПередаче + УсловиеКПередаче + " // не пустая ссылка
				|	И (Док." + СтруктураПараметров.РеквизитКПередаче + " ССЫЛКА Документ.ПередачаТоваров
				|		ИЛИ Док." + СтруктураПараметров.РеквизитКПередаче + " ССЫЛКА Документ.ВозвратТоваровПоставщику
				|		ИЛИ Док." + СтруктураПараметров.РеквизитКПередаче + " ССЫЛКА Документ.РеализацияТоваровУслуг
				|		ИЛИ Док." + СтруктураПараметров.РеквизитКПередаче + " ССЫЛКА Документ.ПеремещениеТоваров) // Условие нат тип реквизита
				|	ТОГДА " + КоличествоЕдОстатков + "
				|	ИНАЧЕ 0
				|КОНЕЦ";*/
				}
			}
			return null;
		}
		// ПолучитьПОЛЕ_КПередаче()

		public object ПолучитьПОЛЕ_ТоварыКПолучению(/*СтруктураПараметров, КоличествоЕдОстатков*/)
		{
			//ПОЛЕ_ТоварыКПолучению = "";
			if(true/*СтруктураПараметров.ВключитьТоварыКПолучению*/)
			{
				if(true/*СтруктураПараметров.ИмяДокумента = "ПеремещениеТоваров"*/)
				{
					/*ПОЛЕ_ТоварыКПолучению = 
			",	ВЫБОР КОГДА ВЫРАЗИТЬ(Док.ДокументРезерва КАК Документ.ПриходныйОрдерНаТовары) <> ЗНАЧЕНИЕ(Документ.ПриходныйОрдерНаТовары.ПустаяСсылка) 
			|		И ВЫРАЗИТЬ(Док.ДокументРезерва КАК Документ.ПриходныйОрдерНаТовары) ССЫЛКА Документ.ПриходныйОрдерНаТовары
			// Документы без права продажи уже учтены в резерве
			|		И НЕ ЕСТЬNULL(ВЫРАЗИТЬ(Док.ДокументРезерва КАК Документ.ПриходныйОрдерНаТовары).БезПраваПродажи, Ложь)
			|		ТОГДА " + КоличествоЕдОстатков + "
			|		ИНАЧЕ 0
			|	КОНЕЦ КАК КПолучению";*/
				}
			}
			return null;
		}
		// ПолучитьПОЛЕ_ТоварыКПолучению
		// Процедура формирует текст условий УсловиеНеРезерв, УсловиеОУ, УсловиеРезерв
		// чтобы не контролировать списание из резерва:
		// - Если реквизит "Резерв" в шапке и реквизит заполнен,
		// то условие зависит от способа списания (если есть)
		// - Если реквизит "Резерв" в табличной части, то условие
		// зависит от способа списания (если есть) и реквизит "Резерв" должен содержать "Заказ покупателя"
		//

		public void СформироватьДопУсловия(/*СтруктураПараметров, Запрос, УсловиеОУ, УсловиеРезерв, УсловиеНеРезерв*/)
		{
			//УсловиеОУ = "ЛОЖЬ";
			//УсловиеНеРезерв = "";
			if(true/*НЕ ПустаяСтрока(СтруктураПараметров.РеквизитРезерв)*/)
			{
				if(true/*СтруктураПараметров.РеквизитРезервВШапке*/)
				{
					if(true/*ЗначениеЗаполнено(СтруктураПараметров.РеквизитРезервЗначение)*/)
					{
						if(true/*СтруктураПараметров.ЕстьСпособСписания*/)
						{
							//УсловиеНеРезерв = " (НЕ (Док.СпособСписанияОстаткаТоваров = ЗНАЧЕНИЕ(Перечисление.СпособыСписанияОстаткаТоваров.ИзРезерва)))";
						}
						if(true/*СтруктураПараметров.ЕстьСерия*/)
						{
							if(true/*СтруктураПараметров.Свойство("ОбособленныйУчетТоваровПоЗаказамПокупателей")*/)
							{
								//УсловиеОУ = ?(СтруктураПараметров.ОбособленныйУчетТоваровПоЗаказамПокупателей,"ИСТИНА", "ЛОЖЬ");
							}
						}
					}
				}
			}
		}
		// СформироватьДопУсловия
		// Процедура формирует временную таблицу по табличной части документа
		//
		// Структура временной таблицы:
		//	Склад						- реквизит табличной части или значение шапки
		//	Номенклатура				- реквизит табличной части или шапки
		//	ХарактеристикаНоменклатуры	- реквизит табличной части или шапки (не обязательный)
		//	СерияНоменклатуры			- реквизит табличной части или шапки (не обязательный)
		//	Качество					- реквизит табличной части или <Новый>
		//	Количество					- реквизит табличной части или шапки
		//	КПередаче					- количество списываемое за счет  товаров к передаче
		//	КоличествоРезервОУ			- количество резервируемое по ОУ.
		//

		public object СформироватьВременнуюТаблицуПоТаблицеДокумента(/*МенеджерВременныхТаблиц, СтруктураПараметров*/)
		{
			if(true/*СтруктураПараметров.ИмяДокумента = "КорректировкаСерийИХарактеристикТоваров"*/)
			{
				//ПолеХарактеристикаНоменклатуры = "ХарактеристикаНоменклатурыСтарая";
				//ПолеСерияНоменклатуры          = "СерияНоменклатурыСтарая";
			}
			//Запрос = Новый Запрос;
			//КоличествоЕдОстатков = ?(СтруктураПараметров.ЕстьКоэффициент, "ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))", "ВЫРАЗИТЬ(Док.Количество КАК Число(15,3))");
			//ПОЛЕ_КПередаче        = ПолучитьПОЛЕ_КПередаче(СтруктураПараметров, КоличествоЕдОстатков, Запрос);
			//ПОЛЕ_ТоварыКПолучению = ПолучитьПОЛЕ_ТоварыКПолучению(СтруктураПараметров, КоличествоЕдОстатков);
			//СформироватьДопУсловия(СтруктураПараметров, Запрос, УсловиеОУ, УсловиеРезерв, УсловиеНеРезерв);
			//СкладСтрока = ТипЗнч(СтруктураПараметров.Склад) = Тип("Строка");
			//Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
			/*Запрос.Текст = 
	    "ВЫБРАТЬ
		|	Док.Номенклатура КАК Номенклатура
		|,	" + ?(СкладСтрока, "Док." + СтруктураПараметров.Склад, "&Склад") + " КАК Склад
		|,	" + КоличествоЕдОстатков + " КАК Количество
		|,	" + ПОЛЕ_КПередаче + " КАК КПередаче
		|,	" + СтруктураПараметров.КоличествоРезервОУ + " КАК КоличествоРезервОУ
		|,	" + ?(СтруктураПараметров.ЕстьКачество, "Док.Качество", "ЗНАЧЕНИЕ(Справочник.Качество.Новый)") + " КАК Качество"
		+ ?(СтруктураПараметров.ЕстьХарактеристика, Символы.ПС + ", Док." + ПолеХарактеристикаНоменклатуры + " КАК ХарактеристикаНоменклатуры", "")
		+ ?(СтруктураПараметров.ЕстьСерия, Символы.ПС + ", Док." + ПолеСерияНоменклатуры + " КАК СерияНоменклатуры", "") + "
		|,	" + ?(УсловиеНеРезерв = "", "ЛОЖЬ", 
				"ВЫБОР КОГДА " + УсловиеНеРезерв + "
		|			ТОГДА ЛОЖЬ 
		|			ИНАЧЕ ИСТИНА 
		|		КОНЕЦ") + " КАК ПризнакСписанияИзРезерва
		|" + ПОЛЕ_ТоварыКПолучению + " 
		|ПОМЕСТИТЬ ВременнаяТаблицаДокумента
		|
		|	ИЗ
		|		Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
		|
		|ГДЕ
		|	" + ?(УсловиеНеРезерв = "ЛОЖЬ" И УсловиеОУ = "ИСТИНА", 
			"ЛОЖЬ",
			"Док.Ссылка = &Ссылка
		|	" + ?(УсловиеНеРезерв = "",
					"",		
					?(СтруктураПараметров.ЕстьСерия, 
						?(УсловиеОУ = "ЛОЖЬ", 
							"",
							" И ( НЕ(" + УсловиеОУ + ") ИЛИ " + УсловиеНеРезерв + ")"),
						" И " + УсловиеНеРезерв)))
		+ Символы.ПС + СтруктураПараметров.ДопУсловияТабличнойЧасти;*/
			if(true/*СтруктураПараметров.ЕстьСоставНабора*/)
			{
				/*Запрос.Текст = Запрос.Текст + "
			|
			|ОБЪЕДИНИТЬ ВСЕ
			|
			|" + ТекстСоставНабора(СтруктураПараметров, УсловиеРезерв, УсловиеОУ);*/
			}
			/*Запрос.Текст = Запрос.Текст + "
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Склад
		|	,Номенклатура
		|	,Качество"
		+ ?(СтруктураПараметров.ЕстьХарактеристика, Символы.ПС + "	, ХарактеристикаНоменклатуры", "")
		+ ?(СтруктураПараметров.ЕстьСерия, Символы.ПС + "	, СерияНоменклатуры", "");*/
			if(true/*НЕ СкладСтрока*/)
			{
				//Запрос.УстановитьПараметр("Склад", СтруктураПараметров.Склад);
			}
			//Запрос.УстановитьПараметр("Ссылка", СтруктураПараметров.ДокументСсылка);
			//Выборка = Запрос.Выполнить().Выбрать();
			//Выборка.Следующий();
			return null;
		}
		// СформироватьВременнуюТаблицуПоТаблицеДокумента
		// Процедура проверяет полученные остатки
		//
		// Параметры:
		//	ОперацияРезвирование	- признак, того, что выполняется резервирование
		//

		public void ПроверитьОстатки(/*Выборка, Отказ, Заголовок, СтруктураПараметров*/)
		{
			if(true/*СтруктураПараметров.ЕстьСерия*/)
			{
				/*// В таблице будут находится данные
*/
				/*// по которым контроль без учета серии пройден
*/
				/*// чтобы не выполнять дважды
*/
				//ТаблицаКонтрольБезСерий = Новый ТаблицаЗначений;
				//ТаблицаКонтрольБезСерий.Колонки.Добавить("Склад");
				//ТаблицаКонтрольБезСерий.Колонки.Добавить("Номенклатура");
				//ТаблицаКонтрольБезСерий.Колонки.Добавить("Качество");
				if(true/*СтруктураПараметров.ЕстьХарактеристика*/)
				{
					//ТаблицаКонтрольБезСерий.Колонки.Добавить("ХарактеристикаНоменклатуры");
				}
			}
			while(true/*Выборка.Следующий()*/)
			{
				if(true/*СтруктураПараметров.ЕстьСерия И Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке*/)
				{
					//ДокументКоличествоБезСерий = Выборка.КоличествоИзСвободногоОстатка;
					//ДокументКПередачеБезСерий = Выборка.КПередаче;
				}
				//ДокументКоличество = Выборка.Количество;
				if(true/*ДокументКоличество <=0*/)
				{
				}
				//ДокументКПередаче  = Выборка.КПередаче;
				//СвободныйОстаток   = Выборка.СвободныйОстаток;
				//КПолучению         = Выборка.КПолучению;
				//КПолучениюОстаток  = Выборка.КПолучениюОстаток;
				//НачалоЦикла = ?(СтруктураПараметров.ЕстьСерия, 1, 2);
			}
			//;;
		}
		//ПроверитьОстатки
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ ЗАПОЛНЕНИЯ РЕГИСТРА СвободныеОстатки
		// Устанавливает параметр программы "Использование регистра "Свободные остатки""
		//
		// Параметры:
		//	ИспользоватьРегистр		- <Булево>, Истина - использовать регистр, Ложь - нет
		//	ДатаНачала				- <Дата>, дата начала использования регистра, имеет смысл, когда регистр используется
		//	ИспользоватьТранзакцию	- <Булево>, Истина - установить использование регистра в транзакции
		//
		// Возвращаемое значение:
		//	<Булево>	- Истина, если параметр установлен; Ложь, если не установлен
		//

		public object УстановитьИспользованиеРегистраСвободныеОстатки(/*ИспользоватьРегистр, ДатаНачала, ИспользоватьТранзакцию = Истина*/)
		{
			/*// Установка монопольного режима - требуется только если будем пересчитывать регистры
*/
			//БылМонопольныйРежим = МонопольныйРежим();
			if(true/*ИспользоватьРегистр*/)
			{
				/*// Установка монопольного режима
*/
				if(true/*НЕ БылМонопольныйРежим*/)
				{
				}
			}
			if(true/*ИспользоватьТранзакцию*/)
			{
				//НачатьТранзакцию();
			}
			/*// Изменение значения константы
*/
			//МенеджерЗаписи = Константы.ИспользоватьРегистрСвободныеОстатки.СоздатьМенеджерЗначения();
			//МенеджерЗаписи.Значение = ИспользоватьРегистр;
			//МенеджерЗаписиДатаНачала = Константы.ДатаНачалаИспользованияРегистраСвободныеОстатки.СоздатьМенеджерЗначения();
			if(true/*ИспользоватьРегистр*/)
			{
				//МенеджерЗаписиДатаНачала.Значение = ДатаНачала;
			}
			/*// Пересчет регистров
*/
			if(true/*ИспользоватьРегистр*/)
			{
				//Результат = ЗаполнитьРегистрСвободныеОстатки(ДатаНачала);
				if(true/*Результат*/)
				{
					//ОбщегоНазначения.СообщитьОСостоянииИзмененияНастройки("Использовать регистр Свободные остатки","Заполнение регистра ""Свободные остатки"" выполнено успешно");
				}
				if(true/*НЕ Результат*/)
				{
				}
			}
			if(true/*ИспользоватьТранзакцию*/)
			{
				//ЗафиксироватьТранзакцию();
			}
			//ОбщегоНазначения.СообщитьОСостоянииИзмененияНастройки("Использовать регистр Свободные остатки","Изменение настройки учета выполнено успешно");
			/*// Снятие монопольного режима
*/
			if(true/*НЕ БылМонопольныйРежим И МонопольныйРежим()*/)
			{
				//УстановитьМонопольныйРежим(Ложь);
				//ОбщегоНазначения.СообщитьОСостоянииИзмененияНастройки("Использовать регистр Свободные остатки", "Снят монопольный режим работы");
			}
			return null;
		}
		// Процедура удаляет все движения регистра "Свободные остатки"
		// Удаление выполняется путем выборки регистраторов порциями
		// и последующей записью пустого набора записей
		//

		public void УдалитьДвиженияРегистраСвободныеОстатки(/**/)
		{
			//НачСсылка = Неопределено;
			/*ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 10000
	               |	СвободныеОстатки.Регистратор
	               |ИЗ
	               |	РегистрНакопления.СвободныеОстатки КАК СвободныеОстатки
				   |//НачСсылка ГДЕ СвободныеОстатки.Регистратор > &НачСсылка
				   |УПОРЯДОЧИТЬ ПО СвободныеОстатки.Регистратор";*/
			//Запрос = Новый Запрос;
			//Запрос.Текст = ТекстЗапроса;
			while(true/*Истина*/)
			{
				//Результат = Запрос.Выполнить();
				if(true/*Результат.Пустой()*/)
				{
				}
				//Выборка = Результат.Выбрать();
				while(true/*Выборка.Следующий()*/)
				{
					//НаборЗаписей = РегистрыНакопления.СвободныеОстатки.СоздатьНаборЗаписей();
					//НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
					//НаборЗаписей.Записать();
				}
				/*// Последующие выборки ограничены последним полученным регистратором
*/
				if(true/*НачСсылка = Неопределено*/)
				{
					//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//НачСсылка", "");
					//Запрос.Текст = ТекстЗапроса;
				}
				//НачСсылка = Выборка.Регистратор;
				//Запрос.УстановитьПараметр("НачСсылка", НачСсылка);
			}
			//;;
		}
		// УдалитьДвиженияРегистраСвободныеОстатки
		// Функция заполняет регистр СвободныеОстатки данными регистров-оснований на дату
		// Остатки регистров-оснований записываются документом "Корректировка записей регистров"
		//
		// Возвращаемое значение:
		//	<булево> - Ложь, если возникла ошибка, иначе Истина
		//

		public object ЗаполнитьРегистрСвободныеОстаткиНаНачалоПериода(/*НачалоПериода*/)
		{
			//ДатаВводаОстатков = КонецДня(НачалоПериода - 1);
			/*// Остатки берем на конец предыдущего дня
*/
			//ДатаОстатков = Новый Граница(ДатаВводаОстатков, ВидГраницы.Включая);
			/*// Изменим дату начала, чтобы выполнить движения
*/
			/*// при выходе из функции восстановим ее
*/
			//МенеджерЗаписиДатаНачала = Константы.ДатаНачалаИспользованияРегистраСвободныеОстатки.СоздатьМенеджерЗначения();
			//МенеджерЗаписиДатаНачала.Прочитать();
			//ДатаНачалаТекущееЗначение = МенеджерЗаписиДатаНачала.Значение;
			//МенеджерЗаписиДатаНачала.Значение = ДатаВводаОстатков;
			//МенеджерЗаписиДатаНачала.Записать();
			//ДокОбъект = Неопределено;
			//ЕстьДвижения            = Ложь;
			//ОшибкаПриЗаписиДвижений = Ложь;
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("ДатаОстатков", ДатаОстатков);
			//Запрос.УстановитьПараметр("ДатаВводаОстатков", ДатаВводаОстатков);
			/*// Заполним регистр остатками на дату начала
*/
			if(true/*ЕстьДвижения*/)
			{
				//ОбщегоНазначения.СообщитьОСостоянииИзмененияНастройки("Использовать регистр Свободные остатки","Сформированы начальные остатки по регистру ""Свободные остатки""","на дату: " + НачалоПериода + ", документ: " + ДокОбъект.Ссылка,1);
			}
			//МенеджерЗаписиДатаНачала.Значение = ДатаНачалаТекущееЗначение;
			//МенеджерЗаписиДатаНачала.Записать();
			return null;
		}
		// ЗаполнитьРегистрСвободныеОстаткиНаНачалоПериода
		// Функция заполняет регистр СвободныеОстатки данными регистров-оснований начиная с даты
		//
		// Алгоритм:1. Очищается регистр СвободныеОстатки
		//			2. Для каждого вида регистра-основания формируется выборка данных порциями,
		//			упорядоченная по регистратору
		//			3. В цикле формируется таблица, содержащая движения регистратора
		//			4. Сформированная таблица записывается с помощью процедуры ВыполнитьДвиженияПоРегиструСвободныеОстатки
		//
		// Возвращаемое значение:
		//	<булево> - Ложь, если возникла ошибка, иначе Истина
		//

		public object ЗаполнитьРегистрСвободныеОстатки(/*ДатаНачала, ВыполнятьВТранзакции = ложь*/)
		{
			if(true/*ДатаНачала = '000101010000'*/)
			{
			}
			//РегистрыНакопления.СвободныеОстатки.УстановитьИспользованиеИтогов(Ложь);
			//ТранзакцияОткрыта = Ложь;
			if(true/*ВыполнятьВТранзакции И НЕ ТранзакцияАктивна()*/)
			{
				//НачатьТранзакцию();
				//ТранзакцияОткрыта = Истина;
			}
			//УдалитьДвиженияРегистраСвободныеОстатки();
			if(true/*НЕ ЗаполнитьРегистрСвободныеОстаткиНаНачалоПериода(ДатаНачала)*/)
			{
				/*// Если при выполнении функции произошли ошибки отменим транзакцию
*/
				if(true/*ТранзакцияОткрыта*/)
				{
					//ОтменитьТранзакцию();
				}
				//РегистрыНакопления.СвободныеОстатки.УстановитьИспользованиеИтогов(Истина);
			}
			/*// Если при записи движений произойдет ошибка
*/
			/*// выполнение функции будет прервано с отрицательным результатом
*/
			//ОшибкаПриЗаписиДвижений = Ложь;
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
			//СформированыДвиженияПоРегиструСвободныеОстатки = ложь;
			/*// При установке признака использования итогов производится пересчет всех итогов
*/
			if(true/*ТранзакцияОткрыта*/)
			{
				//ЗафиксироватьТранзакцию();
			}
			//РегистрыНакопления.СвободныеОстатки.УстановитьИспользованиеИтогов(Истина);
			if(true/*СформированыДвиженияПоРегиструСвободныеОстатки*/)
			{
				//ОбщегоНазначения.СообщитьОСостоянииИзмененияНастройки("Использовать регистр Свободные остатки","Сформированы обороты по регистру ""Свободные остатки""","начиная с "+ДатаНачала,1);
			}
			return null;
		}
		// ЗаполнитьРегистрСвободныеОстатки
	}
}
